Ignore:
Timestamp:
3 May 2013, 17:16:12 (12 years ago)
Author:
tech
Message:

Fixed erroneously removed parts.

Location:
branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/NALwrite.cpp

    r367 r368  
    5353  bsNALUHeader.write(0,1);                    // forbidden_zero_bit
    5454  bsNALUHeader.write(nalu.m_nalUnitType, 6);  // nal_unit_type
     55#if H_MV
     56  bsNALUHeader.write(nalu.m_layerId, 6);      // layerId       
     57#else
    5558  bsNALUHeader.write(nalu.m_reservedZero6Bits, 6);                   // nuh_reserved_zero_6bits
     59#endif
    5660  bsNALUHeader.write(nalu.m_temporalId+1, 3); // nuh_temporal_id_plus1
    5761
     
    142146{
    143147  naluDest.m_nalUnitType = naluSrc.m_nalUnitType;
     148#if H_MV
     149  naluDest.m_layerId  = naluSrc.m_layerId;
     150#else
    144151  naluDest.m_reservedZero6Bits  = naluSrc.m_reservedZero6Bits;
     152#endif
    145153  naluDest.m_temporalId  = naluSrc.m_temporalId;
    146154  naluDest.m_Bitstream   = naluSrc.m_Bitstream;
  • branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/NALwrite.h

    r367 r368  
    5757    NalUnitType nalUnitType,
    5858    UInt temporalID = 0,
     59#if H_MV
     60    Int layerId = 0)
     61#else
    5962    UInt reserved_zero_6bits = 0)
     63#endif
     64#if H_MV
     65  : NALUnit(nalUnitType, temporalID, layerId)
     66#else
    6067  : NALUnit(nalUnitType, temporalID, reserved_zero_6bits)
     68#endif
    6169  , m_Bitstream()
    6270  {}
  • branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncAnalyze.cpp

    r367 r368  
    3636*/
    3737
     38#if !H_MV
    3839#include "TEncAnalyze.h"
     40#endif
    3941
    4042//! \ingroup TLibEncoder
     
    4547//////////////////////////////////////////////////////////////////////
    4648
     49#if !H_MV
    4750TEncAnalyze             m_gcAnalyzeAll;
    4851TEncAnalyze             m_gcAnalyzeI;
    4952TEncAnalyze             m_gcAnalyzeP;
    5053TEncAnalyze             m_gcAnalyzeB;
     54#endif
    5155
    5256//! \}
  • branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncAnalyze.h

    r367 r368  
    150150};
    151151
     152#if !H_MV
    152153extern TEncAnalyze             m_gcAnalyzeAll;
    153154extern TEncAnalyze             m_gcAnalyzeI;
    154155extern TEncAnalyze             m_gcAnalyzeP;
    155156extern TEncAnalyze             m_gcAnalyzeB;
     157#endif
    156158
    157159//! \}
  • branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncCavlc.cpp

    r367 r368  
    549549  }
    550550
     551#if H_MV
     552  WRITE_FLAG( 1, "sps_extension_flag" );
     553
     554  WRITE_FLAG( pcSPS->getInterViewMvVertConstraintFlag() ? 1 : 0, "inter_view_mv_vert_constraint_flag" );
     555#else
    551556  WRITE_FLAG( 0, "sps_extension_flag" );
     557#endif
    552558}
    553559
     
    556562  WRITE_CODE( pcVPS->getVPSId(),                    4,        "vps_video_parameter_set_id" );
    557563  WRITE_CODE( 3,                                    2,        "vps_reserved_three_2bits" );
     564#if H_MV
     565  WRITE_CODE( pcVPS->getMaxLayers() - 1,            6,        "vps_max_layers_minus1" );
     566#else
    558567  WRITE_CODE( 0,                                    6,        "vps_reserved_zero_6bits" );
     568#endif
    559569  WRITE_CODE( pcVPS->getMaxTLayers() - 1,           3,        "vps_max_sub_layers_minus1" );
    560570  WRITE_FLAG( pcVPS->getTemporalNestingFlag(),                "vps_temporal_id_nesting_flag" );
    561571  assert (pcVPS->getMaxTLayers()>1||pcVPS->getTemporalNestingFlag());
     572#if H_MV
     573  WRITE_CODE( 0xffff,                              16,        "vps_extension_offset" );
     574#else
    562575  WRITE_CODE( 0xffff,                              16,        "vps_reserved_ffff_16bits" );
     576#endif
    563577  codePTL( pcVPS->getPTL(), true, pcVPS->getMaxTLayers() - 1 );
    564578#if SIGNAL_BITRATE_PICRATE_IN_VPS
     
    583597
    584598  assert( pcVPS->getNumHrdParameters() <= MAX_VPS_NUM_HRD_PARAMETERS );
     599#if H_MV
     600  assert( pcVPS->getMaxNuhLayerId() < MAX_VPS_NUH_LAYER_ID_PLUS1 );
     601  WRITE_CODE( pcVPS->getMaxNuhLayerId(), 6,                 "vps_max_nuh_layer_id" );
     602#else
    585603  assert( pcVPS->getMaxNuhReservedZeroLayerId() < MAX_VPS_NUH_RESERVED_ZERO_LAYER_ID_PLUS1 );
    586604  WRITE_CODE( pcVPS->getMaxNuhReservedZeroLayerId(), 6,     "vps_max_nuh_reserved_zero_layer_id" );
     605#endif
    587606  pcVPS->setMaxOpSets(1);
    588607  WRITE_UVLC( pcVPS->getMaxOpSets() - 1,                    "vps_max_op_sets_minus1" );
     
    590609  {
    591610    // Operation point set
     611#if H_MV
     612    for( UInt i = 0; i <= pcVPS->getMaxNuhLayerId(); i ++ )
     613#else
    592614    for( UInt i = 0; i <= pcVPS->getMaxNuhReservedZeroLayerId(); i ++ )
     615#endif
    593616    {
    594617      // Only applicable for version 1
     
    631654  }
    632655#endif
     656#if H_MV
     657  WRITE_FLAG( 1,                                             "vps_extension_flag" );
     658
     659  m_pcBitIf->writeAlignOne();                       
     660
     661  WRITE_FLAG( pcVPS->getAvcBaseLayerFlag() ? 1 : 0,          "avc_base_layer_flag" );
     662  WRITE_FLAG( pcVPS->getSplittingFlag() ? 1 : 0,             "splitting_flag" );
     663 
     664  for( Int type = 0; type < MAX_NUM_SCALABILITY_TYPES; type++ )
     665  {
     666    WRITE_FLAG( pcVPS->getScalabilityMask( type ) ? 1 : 0,   "scalability_mask[i]" );
     667  }
     668
     669  for( Int sIdx = 0; sIdx < pcVPS->getNumScalabilityTypes( ); sIdx++ )
     670  {
     671    WRITE_CODE( pcVPS->getDimensionIdLen( sIdx ) - 1 , 3,    "dimension_id_len_minus1[j]");   
     672  }
     673
     674  WRITE_FLAG( pcVPS->getVpsNuhLayerIdPresentFlag() ? 1 : 0,  "vps_nuh_layer_id_present_flag");
     675
     676  for( Int layer = 1; layer <= pcVPS->getMaxLayers() - 1; layer++ )
     677  {
     678    if (pcVPS->getVpsNuhLayerIdPresentFlag() )
     679      WRITE_CODE( pcVPS->getLayerIdInNuh( layer ), 6,          "layer_id_in_nuh[i]");
     680    for( Int sIdx = 0; sIdx < pcVPS->getNumScalabilityTypes() ; sIdx++ )
     681    {     
     682      WRITE_CODE( pcVPS->getDimensionId( layer, sIdx ), pcVPS->getDimensionIdLen( sIdx ), "dimension_id[i][j]");     
     683    }
     684  }
     685
     686  for( Int layerSet = 1; layerSet <= pcVPS->getMaxOpSets() - 1; layerSet++ )
     687  {
     688    WRITE_FLAG( pcVPS->getVpsProfilePresentFlag( layerSet ) ? 1 : 0, "vps_profile_present_flag[lsIdx]" );
     689    if( pcVPS->getVpsProfilePresentFlag( layerSet ) == false )
     690    {
     691      WRITE_UVLC( pcVPS->getProfileLayerSetRefMinus1( layerSet ), "profile_layer_set_ref_minus1[lsIdx]" );
     692    }
     693    codePTL( pcVPS->getPTL( layerSet ), pcVPS->getVpsProfilePresentFlag( layerSet ), pcVPS->getMaxTLayers() - 1 );
     694  }
     695
     696  WRITE_UVLC( pcVPS->getNumOutputLayerSets(),                "num_output_layer_sets" );
     697
     698  for( Int layerSet = 0; layerSet < pcVPS->getNumOutputLayerSets(); layerSet++ )
     699  {
     700    WRITE_UVLC( pcVPS->getOutputLayerSetIdx( layerSet ),      "output_layer_set_idx[i]" );
     701    for( Int layer = 0; layer <= pcVPS->getMaxNuhLayerId(); layer++ )
     702    {
     703      if( pcVPS->getLayerIdIncludedFlag( pcVPS->getOutputLayerSetIdx( layerSet ), layer ) == true )
     704      {
     705        WRITE_FLAG( pcVPS->getOutputLayerFlag( layerSet, layer ) ? 1 : 0, "output_layer_flag" );
     706      }
     707    }
     708  }
     709
     710  for( Int i = 1; i <= pcVPS->getMaxLayers() - 1; i++ )
     711  {
     712    for( Int j = 0; j < i; j++ )
     713    {
     714      WRITE_FLAG( pcVPS->getDirectDependencyFlag( i, j ),    "direct_dependency_flag[i][j]" );
     715    }
     716  }
     717  WRITE_FLAG( 0,                                             "vps_extension2_flag" );
     718#else
    633719  WRITE_FLAG( 0,                     "vps_extension_flag" );
     720#endif
    634721 
    635722  //future extensions here..
     
    10041091  for (Int i = 0; i < maxNumSubLayersMinus1; i++)
    10051092  {
     1093#if !H_MV
    10061094    if(profilePresentFlag)
    10071095    {
     1096#endif
    10081097      WRITE_FLAG( pcPTL->getSubLayerProfilePresentFlag(i), "sub_layer_profile_present_flag[i]" );
    1009     }
     1098#if !H_MV
     1099    }
     1100#endif
    10101101   
    10111102    WRITE_FLAG( pcPTL->getSubLayerLevelPresentFlag(i),   "sub_layer_level_present_flag[i]" );
  • branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncCfg.h

    r367 r368  
    6969  Int m_numRefIdc;
    7070  Int m_refIdc[MAX_NUM_REF_PICS+1];
     71#if H_MV
     72  Int m_numInterViewRefPics;
     73  Int m_interViewRefs    [MAX_NUM_REF_PICS];
     74  Int m_interViewRefPosL[2][MAX_NUM_REF_PICS]; 
     75#endif
    7176  GOPEntry()
    7277  : m_POC(-1)
     
    8388  , m_deltaRPS(0)
    8489  , m_numRefIdc(0)
     90#if H_MV
     91  , m_numInterViewRefPics(0)
     92#endif
    8593  {
    8694    ::memset( m_referencePics, 0, sizeof(m_referencePics) );
    8795    ::memset( m_usedByCurrPic, 0, sizeof(m_usedByCurrPic) );
    8896    ::memset( m_refIdc,        0, sizeof(m_refIdc) );
     97#if H_MV
     98    ::memset( m_interViewRefs,   0, sizeof(m_interViewRefs) );
     99    ::memset( m_interViewRefPosL[0], -1, sizeof(m_interViewRefPosL[0]) );    ::memset( m_interViewRefPosL[1], -1, sizeof(m_interViewRefPosL[1]) );
     100#endif
    89101  }
    90102};
     
    127139  UInt      m_uiDecodingRefreshType;            ///< the type of decoding refresh employed for the random access.
    128140  Int       m_iGOPSize;
     141#if H_MV
     142  GOPEntry  m_GOPList[MAX_GOP+1];
     143#else
    129144  GOPEntry  m_GOPList[MAX_GOP];
     145#endif
    130146  Int       m_extraRPSs;
    131147  Int       m_maxDecPicBuffering[MAX_TLAYER];
     
    337353  Bool      m_useStrongIntraSmoothing;                        ///< enable the use of strong intra smoothing (bi_linear interpolation) for 32x32 blocks when reference samples are flat.
    338354
     355#if H_MV
     356  Int       m_layerId;
     357  Int       m_layerIdInVps;
     358  Int       m_viewId;
     359#if H_3D
     360  Bool      m_isDepth;
     361#endif
     362#endif
    339363public:
    340364  TEncCfg()
    341365  : m_puiColumnWidth()
    342366  , m_puiRowHeight()
     367#if H_MV
     368  , m_layerId(-1)
     369  , m_layerIdInVps(-1)
     370  , m_viewId(-1)
     371#if H_3D
     372  , m_isDepth(false)
     373#endif
     374#endif
    343375  {}
    344376
     
    362394  Void      setFramesToBeEncoded            ( Int   i )      { m_framesToBeEncoded = i; }
    363395 
     396#if H_MV
     397  Void      setLayerId                       ( Int layerId )      { m_layerId = layerId; }
     398  Int       getLayerId                       ()                   { return m_layerId;    }
     399  Int       getLayerIdInVps                  ()                   { return m_layerIdInVps; }
     400  Void      setLayerIdInVps                  ( Int layerIdInVps)  { m_layerIdInVps = layerIdInVps; }
     401  Void      setViewId                        ( Int viewId  )      { m_viewId  = viewId;  }
     402  Int       getViewId                        ()                   { return m_viewId;    }
     403#if H_3D
     404  Void      setIsDepth                       ( Bool isDepth )   { m_isDepth = isDepth; }
     405  Bool      getIsDepth                       ()                 { return m_isDepth; }
     406#endif
     407#endif
    364408  //====== Coding Structure ========
    365409  Void      setIntraPeriod                  ( Int   i )      { m_uiIntraPeriod = (UInt)i; }
    366410  Void      setDecodingRefreshType          ( Int   i )      { m_uiDecodingRefreshType = (UInt)i; }
    367411  Void      setGOPSize                      ( Int   i )      { m_iGOPSize = i; }
     412#if H_MV
     413  Void      setGopList                      ( GOPEntry*  GOPList ) {  for ( Int i = 0; i < MAX_GOP+1; i++ ) m_GOPList[i] = GOPList[i]; }
     414#else
    368415  Void      setGopList                      ( GOPEntry*  GOPList ) {  for ( Int i = 0; i < MAX_GOP; i++ ) m_GOPList[i] = GOPList[i]; }
     416#endif
    369417  Void      setExtraRPSs                    ( Int   i )      { m_extraRPSs = i; }
    370418  GOPEntry  getGOPEntry                     ( Int   i )      { return m_GOPList[i]; }
  • branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncGOP.cpp

    r367 r368  
    100100#endif
    101101#endif
     102#if H_MV
     103  m_layerId      = 0;
     104  m_viewId       = 0;
     105  m_pocLastCoded = -1;
     106#if H_3D
     107  m_isDepth = false;
     108#endif
     109#endif
    102110  return;
    103111}
     
    139147  m_totalCoded         = 0;
    140148
     149#if H_MV
     150  m_ivPicLists           = pcTEncTop->getIvPicLists();
     151  m_layerId              = pcTEncTop->getLayerId();
     152  m_viewId               = pcTEncTop->getViewId();
     153#if H_3D
     154  m_isDepth              = pcTEncTop->getIsDepth();
     155#endif
     156#endif
    141157}
    142158
     
    342358// Public member functions
    343359// ====================================================================================================================
     360#if H_MV
     361Void TEncGOP::initGOP( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP)
     362{
     363  xInitGOP( iPOCLast, iNumPicRcvd, rcListPic, rcListPicYuvRecOut );
     364  m_iNumPicCoded = 0;
     365}
     366#endif
     367#if H_MV
     368Void TEncGOP::compressPicInGOP( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP, Int iGOPid)
     369#else
    344370Void TEncGOP::compressGOP( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP)
     371#endif
    345372{
    346373  TComPic*        pcPic;
     
    354381  TComOutputBitstream* pcSubstreamsOut = NULL;
    355382
     383#if !H_MV
    356384  xInitGOP( iPOCLast, iNumPicRcvd, rcListPic, rcListPicYuvRecOut );
    357385 
    358386  m_iNumPicCoded = 0;
     387#endif
    359388  SEIPictureTiming pictureTimingSEI;
    360389#if L0208_SOP_DESCRIPTION_SEI
     
    379408  UInt *accumNalsDU = NULL;
    380409  SEIDecodingUnitInfo decodingUnitInfoSEI;
     410#if !H_MV
    381411  for ( Int iGOPid=0; iGOPid < m_iGopSize; iGOPid++ )
     412#endif
    382413  {
    383414    UInt uiColDir = 1;
     
    438469    if(pocCurr>=m_pcCfg->getFramesToBeEncoded())
    439470    {
     471#if H_MV
     472      delete pcBitstreamRedirect;
     473      return;
     474#else
    440475      continue;
     476#endif
    441477    }
    442478
     
    459495    pcSlice->setLastIDR(m_iLastIDR);
    460496    pcSlice->setSliceIdx(0);
     497#if H_MV
     498    pcPic  ->setLayerId     ( getLayerId() );
     499    pcPic  ->setViewId      ( getViewId()  );
     500    pcSlice->setLayerId     ( getLayerId() );
     501    pcSlice->setViewId      ( getViewId()  );
     502    pcSlice->setVPS         ( m_pcEncTop->getVPS() );
     503#if H_3D
     504    pcPic  ->setIsDepth( getIsDepth() );
     505    pcSlice->setIsDepth( getIsDepth() );
     506#endif
     507#endif
    461508    //set default slice level flag to the same as SPS level flag
    462509    pcSlice->setLFCrossSliceBoundaryFlag(  pcSlice->getPPS()->getLoopFilterAcrossSlicesEnabledFlag()  );
     
    496543    }
    497544
    498     if(pcSlice->getSliceType()==B_SLICE&&m_pcCfg->getGOPEntry(iGOPid).m_sliceType=='P')
    499     {
    500       pcSlice->setSliceType(P_SLICE);
    501     }
     545#if H_MV
    502546    // Set the nal unit type
    503547    pcSlice->setNalUnitType(getNalUnitType(pocCurr, m_iLastIDR));
     548    if( pcSlice->getSliceType() == B_SLICE )
     549    {
     550      if( m_pcCfg->getGOPEntry( ( pcSlice->getRapPicFlag() && getLayerId() > 0 ) ? MAX_GOP : iGOPid ).m_sliceType == 'P' )
     551      {
     552        pcSlice->setSliceType( P_SLICE );
     553      }
     554    }
     555#else
     556    if(pcSlice->getSliceType()==B_SLICE&&m_pcCfg->getGOPEntry(iGOPid).m_sliceType=='P')
     557    {
     558      pcSlice->setSliceType(P_SLICE);
     559    }
     560    // Set the nal unit type
     561    pcSlice->setNalUnitType(getNalUnitType(pocCurr, m_iLastIDR));
     562#endif
    504563    if(pcSlice->getTemporalLayerNonReferenceFlag())
    505564    {
     
    589648    refPicListModification->setRefPicListModificationFlagL0(0);
    590649    refPicListModification->setRefPicListModificationFlagL1(0);
     650#if H_MV
     651    pcSlice->createAndApplyIvReferencePictureSet( m_ivPicLists, m_refPicSetInterLayer );
     652    pcSlice->setNumRefIdx(REF_PIC_LIST_0,min(m_pcCfg->getGOPEntry( (pcSlice->getRapPicFlag() && getLayerId() > 0) ? MAX_GOP : iGOPid ).m_numRefPicsActive,( pcSlice->getRPS()->getNumberOfPictures() + (Int) m_refPicSetInterLayer.size() ) ) );
     653    pcSlice->setNumRefIdx(REF_PIC_LIST_1,min(m_pcCfg->getGOPEntry( (pcSlice->getRapPicFlag() && getLayerId() > 0) ? MAX_GOP : iGOPid ).m_numRefPicsActive,( pcSlice->getRPS()->getNumberOfPictures() + (Int) m_refPicSetInterLayer.size() ) ) );
     654    xSetRefPicListModificationsMvc( pcSlice, pocCurr, iGOPid );   
     655#else
    591656    pcSlice->setNumRefIdx(REF_PIC_LIST_0,min(m_pcCfg->getGOPEntry(iGOPid).m_numRefPicsActive,pcSlice->getRPS()->getNumberOfPictures()));
    592657    pcSlice->setNumRefIdx(REF_PIC_LIST_1,min(m_pcCfg->getGOPEntry(iGOPid).m_numRefPicsActive,pcSlice->getRPS()->getNumberOfPictures()));
     658#endif
    593659
    594660#if ADAPTIVE_QP_SELECTION
     
    597663
    598664    //  Set reference list
     665#if H_MV   
     666    pcSlice->setRefPicList( rcListPic, m_refPicSetInterLayer );
     667#else
    599668    pcSlice->setRefPicList ( rcListPic );
     669#endif
    600670
    601671    //  Slice info. refinement
     672#if H_MV
     673    if ( pcSlice->getSliceType() == B_SLICE )
     674    {
     675      if( m_pcCfg->getGOPEntry( ( pcSlice->getRapPicFlag() == true && getLayerId() > 0 ) ? MAX_GOP : iGOPid ).m_sliceType == 'P' )
     676      {
     677        pcSlice->setSliceType( P_SLICE );
     678      }
     679    }
     680#else
    602681    if ( (pcSlice->getSliceType() == B_SLICE) && (pcSlice->getNumRefIdx(REF_PIC_LIST_1) == 0) )
    603682    {
    604683      pcSlice->setSliceType ( P_SLICE );
    605684    }
     685#endif
    606686#if !L0034_COMBINED_LIST_CLEANUP
    607687    if (pcSlice->getSliceType() != B_SLICE || !pcSlice->getSPS()->getUseLComb())
     
    10201100    {
    10211101      OutputNALUnit nalu(NAL_UNIT_VPS);
     1102#if H_MV
     1103      if( getLayerId() == 0 )
     1104      {
     1105#endif
    10221106      m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream);
    10231107      m_pcEntropyCoder->encodeVPS(m_pcEncTop->getVPS());
     
    10281112#endif
    10291113
     1114#if H_MV
     1115      }
     1116      nalu = NALUnit(NAL_UNIT_SPS, 0, getLayerId());
     1117#else
    10301118      nalu = NALUnit(NAL_UNIT_SPS);
     1119#endif
    10311120      m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream);
    10321121      if (m_bSeqFirst)
     
    10611150#endif
    10621151
     1152#if H_MV
     1153      nalu = NALUnit(NAL_UNIT_PPS, 0, getLayerId());
     1154#else
    10631155      nalu = NALUnit(NAL_UNIT_PPS);
     1156#endif
    10641157      m_pcEntropyCoder->setBitstream(&nalu.m_Bitstream);
    10651158      m_pcEntropyCoder->encodePPS(pcSlice->getPPS());
     
    13831476          m_pcEntropyCoder->resetEntropy      ();
    13841477          /* start slice NALunit */
     1478#if H_MV
     1479          OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->getTLayer(), getLayerId() );
     1480#else
    13851481          OutputNALUnit nalu( pcSlice->getNalUnitType(), pcSlice->getTLayer() );
     1482#endif
    13861483          Bool sliceSegment = (!pcSlice->isNextSlice());
    13871484          if (!sliceSegment)
     
    16101707      }
    16111708
     1709#if !H_3D
    16121710      pcPic->compressMotion();
     1711#endif
     1712#if H_MV
     1713      m_pocLastCoded = pcPic->getPOC();
     1714#endif
    16131715      //-- For time output for each slice
    16141716      Double dEncTime = (Double)(clock()-iBeforeTime) / CLOCKS_PER_SEC;
     
    19212023
    19222024      pcPic->setReconMark   ( true );
     2025#if H_MV
     2026      TComSlice::markIvRefPicsAsShortTerm( m_refPicSetInterLayer ); 
     2027      std::vector<Int> temp;
     2028      TComSlice::markIvRefPicsAsUnused   ( m_ivPicLists, temp, pcPic->getSlice(0)->getVPS(), m_layerId, pcPic->getPOC() );
     2029#endif
    19232030      m_bFirst = false;
    19242031      m_iNumPicCoded++;
     
    19412048  if( accumNalsDU != NULL) delete accumNalsDU;
    19422049
     2050#if !H_MV
    19432051  assert ( m_iNumPicCoded == iNumPicRcvd );
     2052#endif
    19442053}
    19452054
     2055#if !H_MV
    19462056Void TEncGOP::printOutSummary(UInt uiNumAllPicCoded)
    19472057{
     
    19792089  printf("\nRVM: %.3lf\n" , xCalculateRVM());
    19802090}
     2091#endif
    19812092
    19822093Void TEncGOP::preLoopFilterPicAll( TComPic* pcPic, UInt64& ruiDist, UInt64& ruiBits )
     
    22542365
    22552366  //===== add PSNR =====
     2367#if H_MV
     2368  m_pcEncTop->getAnalyzeAll()->addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);
     2369#else
    22562370  m_gcAnalyzeAll.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);
     2371#endif
    22572372  TComSlice*  pcSlice = pcPic->getSlice(0);
    22582373  if (pcSlice->isIntra())
    22592374  {
     2375#if H_MV
     2376    m_pcEncTop->getAnalyzeI()->addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);
     2377#else
    22602378    m_gcAnalyzeI.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);
     2379#endif
    22612380  }
    22622381  if (pcSlice->isInterP())
    22632382  {
     2383#if H_MV
     2384    m_pcEncTop->getAnalyzeP()->addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);
     2385#else
    22642386    m_gcAnalyzeP.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);
     2387#endif
    22652388  }
    22662389  if (pcSlice->isInterB())
    22672390  {
     2391#if H_MV
     2392    m_pcEncTop->getAnalyzeB()->addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);
     2393#else
    22682394    m_gcAnalyzeB.addResult (dYPSNR, dUPSNR, dVPSNR, (Double)uibits);
     2395#endif
    22692396  }
    22702397
     
    22732400
    22742401#if ADAPTIVE_QP_SELECTION
     2402#if H_MV
     2403  printf("Layer %3d   POC %4d TId: %1d ( %c-SLICE, nQP %d QP %d ) %10d bits",
     2404    pcSlice->getLayerId(),
     2405    pcSlice->getPOC(),
     2406    pcSlice->getTLayer(),
     2407    c,
     2408    pcSlice->getSliceQpBase(),
     2409    pcSlice->getSliceQp(),
     2410    uibits );
     2411#else
    22752412  printf("POC %4d TId: %1d ( %c-SLICE, nQP %d QP %d ) %10d bits",
    22762413         pcSlice->getPOC(),
     
    22802417         pcSlice->getSliceQp(),
    22812418         uibits );
     2419#endif
     2420#else
     2421#if H_MV
     2422  printf("Layer %3d   POC %4d TId: %1d ( %c-SLICE, QP %d ) %10d bits",
     2423    pcSlice->getLayerId(),
     2424    pcSlice->getPOC()-pcSlice->getLastIDR(),
     2425    pcSlice->getTLayer(),
     2426    c,
     2427    pcSlice->getSliceQp(),
     2428    uibits );
    22822429#else
    22832430  printf("POC %4d TId: %1d ( %c-SLICE, QP %d ) %10d bits",
     
    22872434         pcSlice->getSliceQp(),
    22882435         uibits );
     2436#endif
    22892437
    22902438#endif
     
    22972445    for (Int iRefIndex = 0; iRefIndex < pcSlice->getNumRefIdx(RefPicList(iRefList)); iRefIndex++)
    22982446    {
     2447#if H_MV
     2448      if( pcSlice->getLayerId() != pcSlice->getRefLayerId( RefPicList(iRefList), iRefIndex ) )
     2449      {
     2450        printf( "V%d ", pcSlice->getRefLayerId( RefPicList(iRefList), iRefIndex ) );
     2451      }
     2452      else
     2453      {
     2454#endif
    22992455      printf ("%d ", pcSlice->getRefPOC(RefPicList(iRefList), iRefIndex)-pcSlice->getLastIDR());
     2456#if H_MV
     2457      }
     2458#endif
    23002459    }
    23012460    printf("]");
     
    26632822}
    26642823#endif
     2824#if H_MV
     2825Void TEncGOP::xSetRefPicListModificationsMvc( TComSlice* pcSlice, UInt uiPOCCurr, UInt iGOPid )
     2826{
     2827  TComVPS* vps = pcSlice->getVPS();
     2828  Int layer    = pcSlice->getLayerIdInVps( );
     2829 
     2830  if( pcSlice->getSliceType() == I_SLICE || !(pcSlice->getPPS()->getListsModificationPresentFlag()) || vps->getNumDirectRefLayers( layer ) == 0 )
     2831  {
     2832    return;
     2833  }
     2834
     2835  // analyze inter-view modifications
     2836  GOPEntry ge = m_pcCfg->getGOPEntry( (pcSlice->getRapPicFlag() && ( layer > 0) ) ? MAX_GOP : iGOPid );
     2837
     2838  TComRefPicListModification* refPicListModification = pcSlice->getRefPicListModification();
     2839 
     2840  Int maxRefListSize  = pcSlice->getNumRpsCurrTempList();
     2841  Int numTemporalRefs = maxRefListSize - vps->getNumDirectRefLayers( layer );
     2842
     2843
     2844  for (Int li = 0; li < 2; li ++) // Loop over lists L0 and L1
     2845  {
     2846    Int numModifications = 0;
     2847   
     2848    for( Int k = 0; k < ge.m_numInterViewRefPics; k++ )
     2849    {
     2850      numModifications +=  ( ge.m_interViewRefPosL[li][k] >= 0 ) ? 1 : 0;
     2851    }
     2852
     2853    // set inter-view modifications
     2854    if( (maxRefListSize > 1) && (numModifications > 0) )
     2855    {
     2856      refPicListModification->setRefPicListModificationFlagL( li, true );
     2857      Int tempList[16];
     2858      for( Int k = 0; k < 16; k++ ) { tempList[k] = -1; }
     2859
     2860      Bool isModified = false;
     2861      for( Int k = 0; k < ge.m_numInterViewRefPics; k++ )
     2862      {
     2863        if( ge.m_interViewRefPosL[li][k] >= 0 )
     2864        {
     2865          Int orgIdx    = numTemporalRefs;
     2866          Int targetIdx = ge.m_interViewRefPosL[ li ][ k ];
     2867          for( Int idx = 0; idx < vps->getNumDirectRefLayers( layer ); idx++ )
     2868          {           
     2869            Int refLayer  = vps->getLayerIdInVps( vps->getRefLayerId( layer, idx ) );         
     2870            if( ( layer + ge.m_interViewRefs[ k ]) == refLayer )
     2871            {
     2872              tempList[ targetIdx ] = orgIdx;             
     2873              isModified = ( targetIdx != orgIdx  );
     2874            }
     2875            orgIdx++;
     2876          }
     2877        }
     2878      }
     2879      if( isModified )
     2880      {
     2881        Int temporalRefIdx = 0;
     2882        for( Int i = 0; i < pcSlice->getNumRefIdx( ( li == 0 ) ? REF_PIC_LIST_0 : REF_PIC_LIST_1 ); i++ )
     2883        {
     2884          if( tempList[i] >= 0 )
     2885          {
     2886            refPicListModification->setRefPicSetIdxL( li, i, tempList[i] );
     2887          }
     2888          else
     2889          {
     2890            refPicListModification->setRefPicSetIdxL( li, i, temporalRefIdx );
     2891            temporalRefIdx++;
     2892          }
     2893        }
     2894      }
     2895      else
     2896      {
     2897        refPicListModification->setRefPicListModificationFlagL( li, false );
     2898      }
     2899    }
     2900  }
     2901}
     2902#endif
    26652903//! \}
  • branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncGOP.h

    r367 r368  
    9797  SEIWriter               m_seiWriter;
    9898 
     99#if H_MV
     100  TComPicLists*           m_ivPicLists;
     101  std::vector<TComPic*>   m_refPicSetInterLayer;
     102
     103  Int                     m_pocLastCoded;
     104  Int                     m_layerId; 
     105  Int                     m_viewId;
     106#if H_3D
     107  Bool                    m_isDepth;
     108#endif
     109#endif
    99110  //--Adaptive Loop filter
    100111  TEncSampleAdaptiveOffset*  m_pcSAO;
     
    133144 
    134145  Void  init        ( TEncTop* pcTEncTop );
     146#if H_MV
     147  Void  initGOP     ( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP);
     148  Void  compressPicInGOP ( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP, Int iGOPid );
     149#else
    135150  Void  compressGOP( Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRec, std::list<AccessUnit>& accessUnitsInGOP );
     151#endif
    136152  Void  xAttachSliceDataToNalUnit (OutputNALUnit& rNalu, TComOutputBitstream*& rpcBitstreamRedirect);
    137153
     154#if H_MV
     155  Int       getPocLastCoded  ()                 { return m_pocLastCoded; } 
     156  Int       getLayerId       ()                 { return m_layerId;    } 
     157  Int       getViewId        ()                 { return m_viewId;    }
     158#if H_3D
     159  Bool      getIsDepth       ()                 { return m_isDepth; }
     160#endif
     161#endif
    138162
    139163  Int   getGOPSize()          { return  m_iGopSize;  }
     
    141165  TComList<TComPic*>*   getListPic()      { return m_pcListPic; }
    142166 
     167#if !H_MV
    143168  Void  printOutSummary      ( UInt uiNumAllPicCoded );
     169#endif
    144170  Void  preLoopFilterPicAll  ( TComPic* pcPic, UInt64& ruiDist, UInt64& ruiBits );
    145171 
     
    185211#endif
    186212#endif
     213#if H_MV
     214   Void  xSetRefPicListModificationsMvc( TComSlice* pcSlice, UInt uiPOCCurr, UInt iGOPid );
     215#endif
    187216#if L0386_DB_METRIC
    188217  Void dblMetric( TComPic* pcPic, UInt uiNumSlices );
  • branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncSlice.cpp

    r367 r368  
    219219 
    220220  // slice type
     221#if H_MV
     222  SliceType eSliceTypeBaseView;
     223  if( pocLast == 0 || pocCurr % m_pcCfg->getIntraPeriod() == 0 || m_pcGOPEncoder->getGOPSize() == 0 )
     224  {
     225    eSliceTypeBaseView = I_SLICE;
     226  }
     227  else
     228  {
     229    eSliceTypeBaseView = B_SLICE;
     230  }
     231  SliceType eSliceType = eSliceTypeBaseView;
     232  if( eSliceTypeBaseView == I_SLICE && m_pcCfg->getGOPEntry(MAX_GOP).m_POC == 0 && m_pcCfg->getGOPEntry(MAX_GOP).m_sliceType != 'I' )
     233  {
     234    eSliceType = B_SLICE;
     235  }
     236#else
    221237  SliceType eSliceType;
    222238 
     
    225241 
    226242  rpcSlice->setSliceType    ( eSliceType );
     243#endif
    227244
    228245  // ------------------------------------------------------------------------------------------------------------------
     
    253270    if (!(( m_pcCfg->getMaxDeltaQP() == 0 ) && (dQP == -rpcSlice->getSPS()->getQpBDOffsetY() ) && (rpcSlice->getSPS()->getUseLossless())))
    254271    {
     272#if H_MV
     273      dQP += m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_QPOffset;
     274#else
    255275      dQP += m_pcCfg->getGOPEntry(iGOPid).m_QPOffset;
     276#endif
    256277    }
    257278  }
     
    296317#endif
    297318    // Case #1: I or P-slices (key-frame)
     319#if H_MV
     320    Double dQPFactor;
     321    if( eSliceType != I_SLICE )
     322    {
     323      dQPFactor = m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_QPFactor;
     324    }
     325    else
     326#else
    298327    Double dQPFactor = m_pcCfg->getGOPEntry(iGOPid).m_QPFactor;
    299328    if ( eSliceType==I_SLICE )
     329#endif
    300330    {
    301331      dQPFactor=0.57*dLambda_scale;
     
    332362  if( rpcSlice->getSliceType( ) != I_SLICE )
    333363  {
     364#if H_MV
     365    dLambda *= m_pcCfg->getLambdaModifier( m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_temporalId );
     366#else
    334367    dLambda *= m_pcCfg->getLambdaModifier( m_pcCfg->getGOPEntry(iGOPid).m_temporalId );
     368#endif
    335369  }
    336370
     
    371405#if HB_LAMBDA_FOR_LDC
    372406  // restore original slice type
     407#if H_MV
     408  eSliceType = eSliceTypeBaseView;
     409  if( eSliceTypeBaseView == I_SLICE && m_pcCfg->getGOPEntry(MAX_GOP).m_POC == 0 && m_pcCfg->getGOPEntry(MAX_GOP).m_sliceType != 'I' )
     410  {
     411    eSliceType = B_SLICE;
     412  }
     413#else
    373414  eSliceType = (pocLast == 0 || pocCurr % m_pcCfg->getIntraPeriod() == 0 || m_pcGOPEncoder->getGOPSize() == 0) ? I_SLICE : eSliceType;
     415#endif
    374416
    375417  rpcSlice->setSliceType        ( eSliceType );
     
    389431  rpcSlice->setSliceQpDeltaCb   ( 0 );
    390432  rpcSlice->setSliceQpDeltaCr   ( 0 );
     433#if H_MV
     434  rpcSlice->setNumRefIdx(REF_PIC_LIST_0,m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_numRefPicsActive);
     435  rpcSlice->setNumRefIdx(REF_PIC_LIST_1,m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_numRefPicsActive);
     436#else
    391437  rpcSlice->setNumRefIdx(REF_PIC_LIST_0,m_pcCfg->getGOPEntry(iGOPid).m_numRefPicsActive);
    392438  rpcSlice->setNumRefIdx(REF_PIC_LIST_1,m_pcCfg->getGOPEntry(iGOPid).m_numRefPicsActive);
     439#endif
    393440
    394441#if L0386_DB_METRIC
     
    411458      if ( !m_pcCfg->getLoopFilterOffsetInPPS() && eSliceType!=I_SLICE)
    412459      {
     460#if H_MV
     461        rpcSlice->getPPS()->setDeblockingFilterBetaOffsetDiv2( m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_betaOffsetDiv2 + m_pcCfg->getLoopFilterBetaOffset() );
     462        rpcSlice->getPPS()->setDeblockingFilterTcOffsetDiv2( m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_tcOffsetDiv2 + m_pcCfg->getLoopFilterTcOffset() );
     463        rpcSlice->setDeblockingFilterBetaOffsetDiv2( m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_betaOffsetDiv2 + m_pcCfg->getLoopFilterBetaOffset()  );
     464        rpcSlice->setDeblockingFilterTcOffsetDiv2( m_pcCfg->getGOPEntry((eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid).m_tcOffsetDiv2 + m_pcCfg->getLoopFilterTcOffset() );
     465#else
    413466        rpcSlice->getPPS()->setDeblockingFilterBetaOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_betaOffsetDiv2 + m_pcCfg->getLoopFilterBetaOffset() );
    414467        rpcSlice->getPPS()->setDeblockingFilterTcOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_tcOffsetDiv2 + m_pcCfg->getLoopFilterTcOffset() );
    415468        rpcSlice->setDeblockingFilterBetaOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_betaOffsetDiv2 + m_pcCfg->getLoopFilterBetaOffset()  );
    416469        rpcSlice->setDeblockingFilterTcOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_tcOffsetDiv2 + m_pcCfg->getLoopFilterTcOffset() );
     470#endif
    417471      }
    418472      else
     
    435489  rpcSlice->setDepth            ( depth );
    436490 
     491#if H_MV
     492  pcPic->setTLayer( m_pcCfg->getGOPEntry( (eSliceTypeBaseView == I_SLICE) ? MAX_GOP : iGOPid ).m_temporalId );
     493#else
    437494  pcPic->setTLayer( m_pcCfg->getGOPEntry(iGOPid).m_temporalId );
     495#endif
    438496  if(eSliceType==I_SLICE)
    439497  {
  • branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncTop.cpp

    r367 r368  
    4242#include "TLibCommon/ContextModel.h"
    4343#endif
     44#if H_MV
     45#include "../../App/TAppEncoder/TAppEncTop.h"
     46#endif
    4447
    4548//! \ingroup TLibEncoder
     
    7881  m_pcBitCounters          = NULL;
    7982  m_pcRdCosts              = NULL;
     83#if H_MV
     84  m_ivPicLists = NULL;
     85#endif
    8086}
    8187
     
    8995Void TEncTop::create ()
    9096{
     97#if !H_MV
    9198  // initialize global variables
    9299  initROM();
     100#endif
    93101 
    94102  // create processing unit classes
     
    268276  delete[] m_pcRdCosts;
    269277 
     278#if !H_MV
    270279    // destroy ROM
    271280  destroyROM();
     281#endif
    272282
    273283  return;
     
    319329// ====================================================================================================================
    320330
     331#if H_MV
     332Void TEncTop::initNewPic( TComPicYuv* pcPicYuvOrg )
     333{
     334  TComPic* pcPicCurr = NULL;
     335
     336  // get original YUV
     337  xGetNewPicBuffer( pcPicCurr );
     338  pcPicYuvOrg->copyToPic( pcPicCurr->getPicYuvOrg() );
     339
     340  // compute image characteristics
     341  if ( getUseAdaptiveQP() )
     342  {
     343    m_cPreanalyzer.xPreanalyze( dynamic_cast<TEncPic*>( pcPicCurr ) );
     344  }
     345}
     346#endif
    321347Void TEncTop::deletePicBuffer()
    322348{
     
    345371 \retval  iNumEncoded         number of encoded pictures
    346372 */
     373#if H_MV
     374Void TEncTop::encode(Bool flush, TComPicYuv* pcPicYuvOrg, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsOut, Int& iNumEncoded , Int gopId )
     375{
     376#else
    347377Void TEncTop::encode(Bool flush, TComPicYuv* pcPicYuvOrg, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsOut, Int& iNumEncoded )
    348378{
     379#endif
     380#if H_3D
     381  TComPic* picLastCoded = getPic( getGOPEncoder()->getPocLastCoded() );
     382  if( picLastCoded )
     383  {
     384    picLastCoded->compressMotion();
     385  }
     386#endif
     387#if H_MV
     388  if( gopId == 0)
     389  {
     390    m_cGOPEncoder.initGOP(m_iPOCLast, m_iNumPicRcvd, m_cListPic, rcListPicYuvRecOut, accessUnitsOut); 
     391#else
    349392  if (pcPicYuvOrg) {
    350393    // get original YUV
     
    365408    return;
    366409  }
     410#endif
    367411 
    368412#if RATE_CONTROL_LAMBDA_DOMAIN
     
    373417#endif
    374418
     419#if H_MV
     420  }
     421  m_cGOPEncoder.compressPicInGOP(m_iPOCLast, m_iNumPicRcvd, m_cListPic, rcListPicYuvRecOut, accessUnitsOut, gopId );
     422
     423  if( gopId + 1 == m_cGOPEncoder.getGOPSize() )
     424  {
     425#else
    375426  // compress GOP
    376427  m_cGOPEncoder.compressGOP(m_iPOCLast, m_iNumPicRcvd, m_cListPic, rcListPicYuvRecOut, accessUnitsOut);
     428#endif
    377429
    378430#if RATE_CONTROL_LAMBDA_DOMAIN
     
    386438  m_iNumPicRcvd       = 0;
    387439  m_uiNumAllPicCoded += iNumEncoded;
     440#if H_MV
     441}
     442#endif
    388443}
    389444
     
    450505Void TEncTop::xInitSPS()
    451506{
     507#if H_MV
     508  m_cSPS.setSPSId( getLayerIdInVps() );
     509#endif
    452510  ProfileTierLevel& profileTierLevel = *m_cSPS.getPTL()->getGeneralPTL();
    453511  profileTierLevel.setLevelIdc(m_level);
     
    594652Void TEncTop::xInitPPS()
    595653{
     654#if H_MV
     655  if( m_cVPS.getNumDirectRefLayers( getLayerIdInVps() ) > 0 )
     656  {
     657    m_cPPS.setListsModificationPresentFlag( true );
     658  }
     659  m_cPPS.setPPSId( getLayerIdInVps() );
     660  m_cPPS.setSPSId( getLayerIdInVps() );
     661#endif
    596662  m_cPPS.setConstrainedIntraPred( m_bUseConstrainedIntraPred );
    597663  Bool bUseDQP = (getMaxCuDQPDepth() > 0)? true : false;
     
    897963Void TEncTop::selectReferencePictureSet(TComSlice* slice, Int POCCurr, Int GOPid )
    898964{
     965#if H_MV
     966  if( slice->getRapPicFlag() == true && getLayerId() > 0 && POCCurr == 0 )
     967  {
     968    TComReferencePictureSet* rps = slice->getLocalRPS();
     969    rps->setNumberOfNegativePictures(0);
     970    rps->setNumberOfPositivePictures(0);
     971    rps->setNumberOfLongtermPictures(0);
     972    rps->setNumberOfPictures(0);
     973    slice->setRPS(rps);
     974  }
     975  else
     976  {
     977#endif
    899978  slice->setRPSidx(GOPid);
    900979
     
    9241003  slice->setRPS(getSPS()->getRPSList()->getReferencePictureSet(slice->getRPSidx()));
    9251004  slice->getRPS()->setNumberOfPictures(slice->getRPS()->getNumberOfNegativePictures()+slice->getRPS()->getNumberOfPositivePictures());
     1005#if H_MV
     1006  }
     1007#endif
    9261008
    9271009}
     
    10381120  }
    10391121}
     1122#if H_MV
     1123Void TEncTop::printSummary( Int numAllPicCoded )
     1124{
     1125  assert (numAllPicCoded == m_cAnalyzeAll.getNumPic());
     1126
     1127  //--CFG_KDY
     1128  m_cAnalyzeAll.setFrmRate( getFrameRate() );
     1129  m_cAnalyzeI.setFrmRate( getFrameRate() );
     1130  m_cAnalyzeP.setFrmRate( getFrameRate() );
     1131  m_cAnalyzeB.setFrmRate( getFrameRate() );
     1132
     1133  //-- all
     1134  printf( "\n\nSUMMARY ------------------------------------------- LayerId %2d\n", m_layerId );
     1135
     1136  m_cAnalyzeAll.printOut('a');
     1137
     1138  printf( "\n\nI Slices--------------------------------------------------------\n" );
     1139  m_cAnalyzeI.printOut('i');
     1140
     1141  printf( "\n\nP Slices--------------------------------------------------------\n" );
     1142  m_cAnalyzeP.printOut('p');
     1143
     1144  printf( "\n\nB Slices--------------------------------------------------------\n" );
     1145  m_cAnalyzeB.printOut('b');
     1146
     1147#if _SUMMARY_OUT_
     1148  m_cAnalyzeAll.printSummaryOut();
     1149#endif
     1150#if _SUMMARY_PIC_
     1151  m_cAnalyzeI.printSummary('I');
     1152  m_cAnalyzeP.printSummary('P');
     1153  m_cAnalyzeB.printSummary('B');
     1154#endif
     1155}
     1156
     1157Int TEncTop::getFrameId(Int iGOPid) 
     1158{
     1159  if(m_iPOCLast == 0)
     1160  {
     1161    return(0 );
     1162  }
     1163  else
     1164  {
     1165    return m_iPOCLast -m_iNumPicRcvd+ getGOPEntry(iGOPid).m_POC ;
     1166  }
     1167}
     1168
     1169TComPic* TEncTop::getPic( Int poc )
     1170{
     1171  TComList<TComPic*>* listPic = getListPic();
     1172  TComPic* pcPic = NULL;
     1173  for(TComList<TComPic*>::iterator it=listPic->begin(); it!=listPic->end(); it++)
     1174  {
     1175    if( (*it)->getPOC() == poc )
     1176    {
     1177      pcPic = *it ;
     1178      break ;
     1179    }
     1180  }
     1181  return pcPic;
     1182}
     1183#endif
    10401184//! \}
  • branches/HTM-DEV-0.1-dev/source/Lib/TLibEncoder/TEncTop.h

    r367 r368  
    7474  TComList<TComPic*>      m_cListPic;                     ///< dynamic list of pictures
    7575 
     76#if H_MV
     77  TComPicLists*           m_ivPicLists;                   ///< access to picture lists of other layers
     78#endif
    7679  // encoder search
    7780  TEncSearch              m_cSearch;                      ///< encoder search class
     
    122125  TEncRateCtrl            m_cRateCtrl;                    ///< Rate control class
    123126 
     127#if H_MV
     128  TEncAnalyze             m_cAnalyzeAll;
     129  TEncAnalyze             m_cAnalyzeI;
     130  TEncAnalyze             m_cAnalyzeP;
     131  TEncAnalyze             m_cAnalyzeB; 
     132#endif
    124133protected:
    125134  Void  xGetNewPicBuffer  ( TComPic*& rpcPic );           ///< get picture buffer which will be processed
     
    137146  Void      destroy         ();
    138147  Void      init            ();
     148#if H_MV 
     149  TComPicLists* getIvPicLists() { return m_ivPicLists; }
     150#endif
    139151  Void      deletePicBuffer ();
    140152
    141153  Void      createWPPCoders(Int iNumSubstreams);
    142154 
     155#if H_MV
     156  Void      initNewPic(TComPicYuv* pcPicYuvOrg);
     157#endif
    143158  // -------------------------------------------------------------------------------------------------------------------
    144159  // member access functions
     
    177192#endif
    178193  TComScalingList*        getScalingList        () { return  &m_scalingList;         }
     194#if H_MV
     195  TEncAnalyze*            getAnalyzeAll         () { return &m_cAnalyzeAll; }
     196  TEncAnalyze*            getAnalyzeI           () { return &m_cAnalyzeI;   }
     197  TEncAnalyze*            getAnalyzeP           () { return &m_cAnalyzeP;   }
     198  TEncAnalyze*            getAnalyzeB           () { return &m_cAnalyzeB;   }
     199
     200  Int                     getNumAllPicCoded     () { return m_uiNumAllPicCoded; }
     201 
     202  Int                     getFrameId            (Int iGOPid);
     203 
     204  TComPic*                getPic                ( Int poc );
     205  Void                    setIvPicLists         ( TComPicLists* picLists) { m_ivPicLists = picLists; }
     206#endif
    179207  // -------------------------------------------------------------------------------------------------------------------
    180208  // encoder function
     
    182210
    183211  /// encode several number of pictures until end-of-sequence
     212#if H_MV
     213  Void encode( Bool bEos, TComPicYuv* pcPicYuvOrg, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsOut, Int& iNumEncoded  , Int gopId  ); 
     214#else
    184215  Void encode( Bool bEos, TComPicYuv* pcPicYuvOrg, TComList<TComPicYuv*>& rcListPicYuvRecOut,
    185216              std::list<AccessUnit>& accessUnitsOut, Int& iNumEncoded ); 
    186 
     217#endif
     218
     219#if H_MV
     220  Void printSummary      ( Int numAllPicCoded );
     221#else
    187222  void printSummary() { m_cGOPEncoder.printOutSummary (m_uiNumAllPicCoded); }
     223#endif
    188224};
    189225
Note: See TracChangeset for help on using the changeset viewer.