Changeset 532 in SHVCSoftware for branches/SHM-4.1-dev/source/Lib/TLibDecoder


Ignore:
Timestamp:
2 Jan 2014, 07:21:30 (11 years ago)
Author:
seregin
Message:

update to HM-12.1 base

Location:
branches/SHM-4.1-dev/source/Lib/TLibDecoder
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-4.1-dev/source/Lib/TLibDecoder/NALread.cpp

    r313 r532  
    126126  else
    127127  {
    128     assert( nalu.m_nalUnitType != NAL_UNIT_CODED_SLICE_TLA_R
     128    assert( nalu.m_nalUnitType != NAL_UNIT_CODED_SLICE_TSA_R
    129129         && nalu.m_nalUnitType != NAL_UNIT_CODED_SLICE_TSA_N
    130130         && nalu.m_nalUnitType != NAL_UNIT_CODED_SLICE_STSA_R
  • branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r531 r532  
    19381938            Int pocLTCurr = rpcSlice->getPOC() - deltaPocMSBCycleLT * maxPicOrderCntLSB
    19391939                                        - iPOClsb + pocLsbLt;
    1940 
    19411940            rps->setPOC     (j, pocLTCurr);
    19421941            rps->setDeltaPOC(j, - rpcSlice->getPOC() + pocLTCurr);
     
    28762875  UInt  code, sizeId, listId;
    28772876  Bool scalingListPredModeFlag;
    2878 
    28792877  //for each size
    28802878  for(sizeId = 0; sizeId < SCALING_LIST_SIZE_NUM; sizeId++)
     
    29612959  return (cnt>0);
    29622960}
     2961
    29632962//! \}
    29642963
  • branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecCu.cpp

    r524 r532  
    963963
    964964}
     965
    965966//! \}
  • branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecEntropy.h

    r494 r532  
    106106  virtual Void parseCoeffNxN( TComDataCU* pcCU, TCoeff* pcCoef, UInt uiAbsPartIdx, UInt uiWidth, UInt uiHeight, UInt uiDepth, TextType eTType ) = 0;
    107107  virtual Void parseTransformSkipFlags ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt width, UInt height, UInt uiDepth, TextType eTType) = 0;
    108 
    109108  virtual Void updateContextTables( SliceType eSliceType, Int iQp ) = 0;
    110109 
     
    166165  Void updateContextTables    ( SliceType eSliceType, Int iQp ) { m_pcEntropyDecoderIf->updateContextTables( eSliceType, iQp ); }
    167166 
     167 
    168168private:
    169169  Void xDecodeTransform        ( TComDataCU* pcCU, UInt offsetLuma, UInt offsetChroma, UInt uiAbsPartIdx, UInt uiDepth, UInt width, UInt height, UInt uiTrIdx, Bool& bCodeDQP );
  • branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecGop.cpp

    r442 r532  
    128128  //-- For time output for each slice
    129129  long iBeforeTime = clock();
    130  
     130#if !HM_CLEANUP_SAO
    131131  UInt uiStartCUAddr   = pcSlice->getSliceSegmentCurStartCUAddr();
    132132
     
    136136    m_sliceStartCUAddress.push_back(uiSliceStartCuAddr);
    137137  }
    138 
     138#endif
    139139  m_pcSbacDecoder->init( (TDecBinIf*)m_pcBinCABAC );
    140140  m_pcEntropyDecoder->setEntropyDecoder (m_pcSbacDecoder);
     
    163163  m_pcEntropyDecoder->setBitstream      ( ppcSubstreams[0] );
    164164  m_pcEntropyDecoder->resetEntropy      (pcSlice);
    165 
     165#if !HM_CLEANUP_SAO
    166166  if(uiSliceStartCuAddr == uiStartCUAddr)
    167167  {
    168168    m_LFCrossSliceBoundaryFlag.push_back( pcSlice->getLFCrossSliceBoundaryFlag());
    169169  }
     170#endif
    170171  m_pcSbacDecoders[0].load(m_pcSbacDecoder);
    171172  m_pcSliceDecoder->decompressSlice( ppcSubstreams, rpcPic, m_pcSbacDecoder, m_pcSbacDecoders);
     
    195196  m_pcLoopFilter->setCfg(bLFCrossTileBoundary);
    196197  m_pcLoopFilter->loopFilterPic( rpcPic );
    197 
     198#if !HM_CLEANUP_SAO
    198199  if(pcSlice->getSPS()->getUseSAO())
    199200  {
     
    201202    rpcPic->createNonDBFilterInfo(m_sliceStartCUAddress, 0, &m_LFCrossSliceBoundaryFlag, rpcPic->getPicSym()->getNumTiles(), bLFCrossTileBoundary);
    202203  }
    203 
     204#endif
    204205  if( pcSlice->getSPS()->getUseSAO() )
    205206  {
     207#if HM_CLEANUP_SAO
     208    m_pcSAO->reconstructBlkSAOParams(rpcPic, rpcPic->getPicSym()->getSAOBlkParam());
     209    m_pcSAO->SAOProcess(rpcPic);
     210    m_pcSAO->PCMLFDisableProcess(rpcPic);
     211#else
    206212    {
    207213      SAOParam *saoParam = rpcPic->getPicSym()->getSaoParam();
     
    214220      m_pcSAO->destroyPicSaoInfo();
    215221    }
    216   }
    217 
     222#endif
     223  }
     224#if !HM_CLEANUP_SAO
    218225  if(pcSlice->getSPS()->getUseSAO())
    219226  {
    220227    rpcPic->destroyNonDBFilterInfo();
    221228  }
    222 
     229#endif
    223230  rpcPic->compressMotion();
    224231  Char c = (pcSlice->isIntra() ? 'I' : pcSlice->isInterP() ? 'P' : 'B');
     
    283290  rpcPic->setOutputMark(true);
    284291  rpcPic->setReconMark(true);
     292#if !HM_CLEANUP_SAO
    285293  m_sliceStartCUAddress.clear();
    286294  m_LFCrossSliceBoundaryFlag.clear();
     295#endif
    287296}
    288297
  • branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecGop.h

    r313 r532  
    8383  Int                   m_decodedPictureHashSEIEnabled;  ///< Checksum(3)/CRC(2)/MD5(1)/disable(0) acting on decoded picture hash SEI message
    8484
     85#if !HM_CLEANUP_SAO
    8586  //! list that contains the CU address of each slice plus the end address
    8687  std::vector<Int> m_sliceStartCUAddress;
    8788  std::vector<Bool> m_LFCrossSliceBoundaryFlag;
    88 
     89#endif
    8990#if SVC_EXTENSION
    9091  UInt                  m_layerId;
  • branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecSbac.cpp

    r494 r532  
    368368#if AUXILIARY_PICTURES
    369369        if (format == CHROMA_400)
     370        {
    370371          uiSample = uiGrayVal;
     372        }
    371373        else
    372374#endif
     
    389391#if AUXILIARY_PICTURES
    390392        if (format == CHROMA_400)
     393        {
    391394          uiSample = uiGrayVal;
     395        }
    392396        else
    393397#endif
     
    13781382    if (uiCode == 0)
    13791383    {
     1384#if HM_CLEANUP_SAO
     1385      ruiVal = 1;
     1386#else
    13801387      ruiVal = 5;
     1388#endif
    13811389    }
    13821390    else
    13831391    {
     1392#if HM_CLEANUP_SAO
     1393      ruiVal = 2;
     1394#else
    13841395      ruiVal = 1;
    1385     }
    1386   }
    1387 }
     1396#endif
     1397    }
     1398  }
     1399}
     1400
     1401#if HM_CLEANUP_SAO
     1402
     1403Void TDecSbac::parseSaoSign(UInt& val)
     1404{
     1405  m_pcTDecBinIf->decodeBinEP ( val );
     1406}
     1407
     1408Void TDecSbac::parseSAOBlkParam (SAOBlkParam& saoBlkParam
     1409                                , Bool* sliceEnabled
     1410                                , Bool leftMergeAvail
     1411                                , Bool aboveMergeAvail
     1412                                )
     1413{
     1414  UInt uiSymbol;
     1415
     1416  Bool isLeftMerge = false;
     1417  Bool isAboveMerge= false;
     1418
     1419  if(leftMergeAvail)
     1420  {
     1421    parseSaoMerge(uiSymbol); //sao_merge_left_flag
     1422    isLeftMerge = (uiSymbol?true:false);
     1423  }
     1424
     1425  if( aboveMergeAvail && !isLeftMerge)
     1426  {
     1427    parseSaoMerge(uiSymbol); //sao_merge_up_flag
     1428    isAboveMerge = (uiSymbol?true:false);
     1429  }
     1430
     1431  if(isLeftMerge || isAboveMerge) //merge mode
     1432  {
     1433    saoBlkParam[SAO_Y].modeIdc = saoBlkParam[SAO_Cb].modeIdc = saoBlkParam[SAO_Cr].modeIdc = SAO_MODE_MERGE;
     1434    saoBlkParam[SAO_Y].typeIdc = saoBlkParam[SAO_Cb].typeIdc = saoBlkParam[SAO_Cr].typeIdc = (isLeftMerge)?SAO_MERGE_LEFT:SAO_MERGE_ABOVE;
     1435  }
     1436  else //new or off mode
     1437  {   
     1438    for(Int compIdx=0; compIdx < NUM_SAO_COMPONENTS; compIdx++)
     1439    {
     1440      SAOOffset& ctbParam = saoBlkParam[compIdx];
     1441
     1442      if(!sliceEnabled[compIdx])
     1443      {
     1444        //off
     1445        ctbParam.modeIdc = SAO_MODE_OFF;
     1446        continue;
     1447      }
     1448
     1449      //type
     1450      if(compIdx == SAO_Y || compIdx == SAO_Cb)
     1451      {
     1452        parseSaoTypeIdx(uiSymbol); //sao_type_idx_luma or sao_type_idx_chroma
     1453
     1454        assert(uiSymbol ==0 || uiSymbol ==1 || uiSymbol ==2);
     1455
     1456        if(uiSymbol ==0) //OFF
     1457        {
     1458          ctbParam.modeIdc = SAO_MODE_OFF;
     1459        }
     1460        else if(uiSymbol == 1) //BO
     1461        {
     1462          ctbParam.modeIdc = SAO_MODE_NEW;
     1463          ctbParam.typeIdc = SAO_TYPE_START_BO;
     1464        }
     1465        else //2, EO
     1466        {
     1467          ctbParam.modeIdc = SAO_MODE_NEW;
     1468          ctbParam.typeIdc = SAO_TYPE_START_EO;
     1469        }
     1470
     1471      }
     1472      else //Cr, follow Cb SAO type
     1473      {
     1474        ctbParam.modeIdc = saoBlkParam[SAO_Cb].modeIdc;
     1475        ctbParam.typeIdc = saoBlkParam[SAO_Cb].typeIdc;
     1476      }
     1477
     1478      if(ctbParam.modeIdc == SAO_MODE_NEW)
     1479      {
     1480        Int offset[4];
     1481        for(Int i=0; i< 4; i++)
     1482        {
     1483          parseSaoMaxUvlc(uiSymbol,  g_saoMaxOffsetQVal[compIdx] ); //sao_offset_abs
     1484          offset[i] = (Int)uiSymbol;
     1485        }
     1486
     1487        if(ctbParam.typeIdc == SAO_TYPE_START_BO)
     1488        {
     1489          for(Int i=0; i< 4; i++)
     1490          {
     1491            if(offset[i] != 0)
     1492            {
     1493              parseSaoSign(uiSymbol); //sao_offset_sign
     1494              if(uiSymbol)
     1495              {
     1496                offset[i] = -offset[i];
     1497              }
     1498            }
     1499          }
     1500          parseSaoUflc(NUM_SAO_BO_CLASSES_LOG2, uiSymbol ); //sao_band_position
     1501          ctbParam.typeAuxInfo = uiSymbol;
     1502       
     1503          for(Int i=0; i<4; i++)
     1504          {
     1505            ctbParam.offset[(ctbParam.typeAuxInfo+i)%MAX_NUM_SAO_CLASSES] = offset[i];
     1506          }     
     1507       
     1508        }
     1509        else //EO
     1510        {
     1511          ctbParam.typeAuxInfo = 0;
     1512
     1513          if(compIdx == SAO_Y || compIdx == SAO_Cb)
     1514          {
     1515            parseSaoUflc(NUM_SAO_EO_TYPES_LOG2, uiSymbol ); //sao_eo_class_luma or sao_eo_class_chroma
     1516            ctbParam.typeIdc += uiSymbol;
     1517          }
     1518          else
     1519          {
     1520            ctbParam.typeIdc = saoBlkParam[SAO_Cb].typeIdc;
     1521          }
     1522          ctbParam.offset[SAO_CLASS_EO_FULL_VALLEY] = offset[0];
     1523          ctbParam.offset[SAO_CLASS_EO_HALF_VALLEY] = offset[1];
     1524          ctbParam.offset[SAO_CLASS_EO_PLAIN      ] = 0;
     1525          ctbParam.offset[SAO_CLASS_EO_HALF_PEAK  ] = -offset[2];
     1526          ctbParam.offset[SAO_CLASS_EO_FULL_PEAK  ] = -offset[3];
     1527        }
     1528      }
     1529    }
     1530  }
     1531}
     1532
     1533#else
    13881534
    13891535inline Void copySaoOneLcuParam(SaoLcuParam* psDst,  SaoLcuParam* psSrc)
     
    15591705}
    15601706
     1707#endif
     1708
    15611709/**
    15621710 - Initialize our contexts from the nominated source.
  • branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecSbac.h

    r494 r532  
    9090  Void  parseSaoTypeIdx           ( UInt&  ruiVal  );
    9191  Void  parseSaoUflc              ( UInt uiLength, UInt& ruiVal     );
     92#if HM_CLEANUP_SAO
     93  Void parseSAOBlkParam (SAOBlkParam& saoBlkParam, Bool* sliceEnabled, Bool leftMergeAvail, Bool aboveMergeAvail);
     94  Void parseSaoSign(UInt& val);
     95#else
    9296  Void  parseSaoOneLcuInterleaving(Int rx, Int ry, SAOParam* pSaoParam, TComDataCU* pcCU, Int iCUAddrInSlice, Int iCUAddrUpInSlice, Int allowMergeLeft, Int allowMergeUp);
    9397  Void  parseSaoOffset            (SaoLcuParam* psSaoLcuParam, UInt compIdx);
     98#endif
    9499private:
    95100  Void  xReadUnarySymbol    ( UInt& ruiSymbol, ContextModel* pcSCModel, Int iOffset );
  • branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecSlice.cpp

    r345 r532  
    197197  UInt uiTileLCUX;
    198198  Int iNumSubstreamsPerTile = 1; // if independent.
    199 
    200199  Bool depSliceSegmentsEnabled = rpcPic->getSlice(rpcPic->getCurrSliceIdx())->getPPS()->getDependentSliceSegmentsEnabledFlag();
    201200  uiTileStartLCU = rpcPic->getPicSym()->getTComTile(rpcPic->getPicSym()->getTileIdxMap(iStartCUAddr))->getFirstCUAddr();
     
    323322    g_bJustDoIt = g_bEncDecTraceEnable;
    324323#endif
     324
     325#if HM_CLEANUP_SAO
     326    if ( pcSlice->getSPS()->getUseSAO() )
     327    {
     328      SAOBlkParam& saoblkParam = (rpcPic->getPicSym()->getSAOBlkParam())[iCUAddr];
     329      if (pcSlice->getSaoEnabledFlag()||pcSlice->getSaoEnabledFlagChroma())
     330      {
     331        Bool sliceEnabled[NUM_SAO_COMPONENTS];
     332        sliceEnabled[SAO_Y] = pcSlice->getSaoEnabledFlag();
     333        sliceEnabled[SAO_Cb]= sliceEnabled[SAO_Cr]= pcSlice->getSaoEnabledFlagChroma();
     334
     335        Bool leftMergeAvail = false;
     336        Bool aboveMergeAvail= false;
     337
     338        //merge left condition
     339        Int rx = (iCUAddr % uiWidthInLCUs);
     340        if(rx > 0)
     341        {
     342          leftMergeAvail = rpcPic->getSAOMergeAvailability(iCUAddr, iCUAddr-1);
     343        }
     344        //merge up condition
     345        Int ry = (iCUAddr / uiWidthInLCUs);
     346        if(ry > 0)
     347        {
     348          aboveMergeAvail = rpcPic->getSAOMergeAvailability(iCUAddr, iCUAddr-uiWidthInLCUs);
     349        }
     350
     351        pcSbacDecoder->parseSAOBlkParam( saoblkParam, sliceEnabled, leftMergeAvail, aboveMergeAvail);
     352      }
     353      else
     354      {
     355        saoblkParam[SAO_Y ].modeIdc = SAO_MODE_OFF;
     356        saoblkParam[SAO_Cb].modeIdc = SAO_MODE_OFF;
     357        saoblkParam[SAO_Cr].modeIdc = SAO_MODE_OFF;
     358      }
     359    }
     360#else
    325361    if ( pcSlice->getSPS()->getUseSAO() && (pcSlice->getSaoEnabledFlag()||pcSlice->getSaoEnabledFlagChroma()) )
    326362    {
     
    374410      }
    375411    }
     412#endif
     413
    376414    m_pcCuDecoder->decodeCU     ( pcCU, uiIsLast );
    377415    m_pcCuDecoder->decompressCU ( pcCU );
  • branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecTop.cpp

    r531 r532  
    371371#endif
    372372#endif
    373 
     373#if !HM_CLEANUP_SAO
    374374    rpcPic->getPicSym()->allocSaoParam(&m_cSAO);
     375#endif
    375376    m_cListPic.pushBack( rpcPic );
    376377   
     
    452453#endif
    453454#endif
     455#if !HM_CLEANUP_SAO
    454456  rpcPic->getPicSym()->allocSaoParam(&m_cSAO);
     457#endif
    455458}
    456459
     
    747750  m_cSAO.destroy();
    748751#if REPN_FORMAT_IN_VPS
     752#if AUXILIARY_PICTURES
     753#if HM_CLEANUP_SAO
     754  m_cSAO.create( m_apcSlicePilot->getPicWidthInLumaSamples(), m_apcSlicePilot->getPicHeightInLumaSamples(), sps->getChromaFormatIdc(), sps->getMaxCUWidth(), sps->getMaxCUHeight(), sps->getMaxCUDepth() );
     755#else
     756  m_cSAO.create( m_apcSlicePilot->getPicWidthInLumaSamples(), m_apcSlicePilot->getPicHeightInLumaSamples(), sps->getChromaFormatIdc(), sps->getMaxCUWidth(), sps->getMaxCUHeight() );
     757#endif
     758#else
     759#if HM_CLEANUP_SAO
     760  m_cSAO.create( m_apcSlicePilot->getPicWidthInLumaSamples(), m_apcSlicePilot->getPicHeightInLumaSamples(), sps->getMaxCUWidth(), sps->getMaxCUHeight(), sps->getMaxCUDepth() );
     761#else
    749762  m_cSAO.create( m_apcSlicePilot->getPicWidthInLumaSamples(), m_apcSlicePilot->getPicHeightInLumaSamples(), sps->getMaxCUWidth(), sps->getMaxCUHeight() );
     763#endif
     764#endif
     765#else
     766#if HM_CLEANUP_SAO
     767  m_cSAO.create( sps->getPicWidthInLumaSamples(), sps->getPicHeightInLumaSamples(), sps->getMaxCUWidth(), sps->getMaxCUHeight(), sps->getMaxCUDepth() );
    750768#else
    751769  m_cSAO.create( sps->getPicWidthInLumaSamples(), sps->getPicHeightInLumaSamples(), sps->getMaxCUWidth(), sps->getMaxCUHeight() );
     770#endif
    752771#endif
    753772  m_cLoopFilter.create( sps->getMaxCUDepth() );
     
    969988    // Check for TSA alignment
    970989    if( m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_TSA_N ||
    971         m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_TLA_R
     990        m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_TSA_R
    972991         )
    973992    {
     
    979998        {
    980999          assert( m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_TSA_N ||
    981                     m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_TLA_R );    // TSA pictures should be aligned among depenedent layers
     1000                    m_apcSlicePilot->getNalUnitType() == NAL_UNIT_CODED_SLICE_TSA_R );    // TSA pictures should be aligned among depenedent layers
    9821001        }
    9831002      }
     
    12751294    if (m_layerId == 0)
    12761295#endif
    1277 #if FIX1071
    12781296    pcSlice->setRefPicList( m_cListPic, true );
    1279 #else
    1280     pcSlice->setRefPicList( m_cListPic );
    1281 #endif
    12821297
    12831298#if SVC_EXTENSION
     
    15241539  {
    15251540    pcSlice->setScalingList ( pcSlice->getSPS()->getScalingList()  );
    1526 
    15271541    if(pcSlice->getPPS()->getScalingListPresentFlag())
    15281542    {
     
    17701784    case NAL_UNIT_CODED_SLICE_TRAIL_R:
    17711785    case NAL_UNIT_CODED_SLICE_TRAIL_N:
    1772     case NAL_UNIT_CODED_SLICE_TLA_R:
     1786    case NAL_UNIT_CODED_SLICE_TSA_R:
    17731787    case NAL_UNIT_CODED_SLICE_TSA_N:
    17741788    case NAL_UNIT_CODED_SLICE_STSA_R:
     
    17901804#endif
    17911805      break;
     1806     
     1807    case NAL_UNIT_EOS:
     1808      m_associatedIRAPType = NAL_UNIT_INVALID;
     1809      m_pocCRA = 0;
     1810      m_pocRandomAccess = MAX_INT;
     1811      m_prevPOC = MAX_INT;
     1812      m_bFirstSliceInPicture = true;
     1813      m_bFirstSliceInSequence = true;
     1814      m_prevSliceSkipped = false;
     1815      m_skippedPOC = 0;
     1816      return false;
     1817     
     1818    case NAL_UNIT_ACCESS_UNIT_DELIMITER:
     1819      // TODO: process AU delimiter
     1820      return false;
     1821     
     1822    case NAL_UNIT_EOB:
     1823      return false;
     1824     
    17921825    default:
    1793       assert (1);
     1826      assert (0);
    17941827  }
    17951828
  • branches/SHM-4.1-dev/source/Lib/TLibDecoder/TDecTop.h

    r531 r532  
    7373  TComList<TComPic*>      m_cListPic;         //  Dynamic buffer
    7474  ParameterSetManagerDecoder m_parameterSetManagerDecoder;  // storage for parameter sets
    75 
    7675  TComSlice*              m_apcSlicePilot;
    7776
Note: See TracChangeset for help on using the changeset viewer.