Changeset 1170 in 3DVCSoftware for branches/HTM-13.1-dev0/source/App/TAppEncoder


Ignore:
Timestamp:
5 Apr 2015, 22:49:22 (10 years ago)
Author:
tech
Message:

K0050: Signaling of inter-component prediction.

Location:
branches/HTM-13.1-dev0/source/App/TAppEncoder
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-13.1-dev0/source/App/TAppEncoder/TAppEncCfg.cpp

    r1166 r1170  
    224224    in>>entry.m_interViewRefPosL[1][i];
    225225  }
     226#endif
     227#if HHI_INTER_COMP_PRED_K0052
     228#if H_3D
     229  in>>entry.m_interCompPredFlag;
     230#endif
    226231#endif
    227232  return in;
  • branches/HTM-13.1-dev0/source/App/TAppEncoder/TAppEncTop.cpp

    r1169 r1170  
    204204  }
    205205#endif
    206 
    207206  for(Int layerIdInVps = 0; layerIdInVps < m_numberOfLayers; layerIdInVps++)
    208207  {
     
    644643  }
    645644#endif
     645#if H_3D_ANNEX_SELECTION_FIX
     646#if H_3D
     647 /// SET Profiles
     648  for(Int layerIdInVps = 0; layerIdInVps < m_numberOfLayers; layerIdInVps++)
     649  {
     650    Int profileIdc = -1;
     651    for (Int olsIdx = 0; olsIdx < vps.getNumOutputLayerSets(); olsIdx++ )
     652    {   
     653      Int lsIdx = vps.olsIdxToLsIdx( olsIdx );
     654      for(Int i = 0; i < vps.getNumLayersInIdList( lsIdx ); i++ )
     655      {
     656        if( vps.getLayerIdInNuh( layerIdInVps) == vps.getLayerSetLayerIdList(lsIdx, i) )
     657        {
     658          Int ptlIdx = vps.getProfileTierLevelIdx( olsIdx, i );
     659          if ( ptlIdx != -1 )
     660          {
     661            Int curProfileIdc = vps.getPTL(ptlIdx)->getGeneralPTL()->getProfileIdc();
     662            if (profileIdc == -1)   
     663            {
     664              profileIdc = curProfileIdc;
     665            }
     666            else
     667            {   
     668              if ( profileIdc != curProfileIdc )
     669              {             
     670                fprintf(stderr, "Error: ProfileIdc for layer with index %d in VPS not equal in all OLSs. \n", layerIdInVps );
     671                exit(EXIT_FAILURE);
     672              }
     673            }
     674          }
     675        }
     676      }
     677    }
     678    if (profileIdc == -1 )
     679    {
     680      fprintf(stderr, "Error: No profile given for layer with index %d in VPS not equal in all OLS. \n", layerIdInVps );
     681      exit(EXIT_FAILURE);
     682    }
     683    m_acTEncTopList[ layerIdInVps ]->setProfileIdc( profileIdc );
     684  }
     685#endif
     686#endif
    646687#if H_3D_VSO
    647688  if ( m_bUseVSO )
     
    13371378
    13381379  assert( m_iNumberOfViews == vps.getNumViews() );
     1380
     1381
     1382#if HHI_INTER_COMP_PRED_K0052
     1383#if H_3D
     1384  vps.initViewCompLayer( );
     1385#endif
     1386#endif
    13391387}
    13401388
     
    14261474#endif
    14271475              {
     1476#if !HHI_INTER_COMP_PRED_K0052               
    14281477                Bool refAlwaysIntra = ( i == getGOPSize() ) && ( m_iIntraPeriod[ curLayerIdInVps ] % m_iIntraPeriod[ refLayerIdInVps ] == 0 );
     1478#endif
    14291479                Bool refLayerZero   = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 );
     1480#if HHI_INTER_COMP_PRED_K0052
     1481                // refAlwaysIntra actually not needed, since TemporalIds need to be aligned within an AU.
     1482                // Thus, reference pictures of IRAP pictures have TemporalId equal to 0.
     1483                maxTid = std::max( maxTid, refLayerZero ? 0 : geRef.m_temporalId );
     1484#else
    14301485                maxTid = std::max( maxTid, ( refAlwaysIntra || refLayerZero ) ? 0 : geRef.m_temporalId );
     1486#endif
    14311487              }
    14321488            }
     
    14361492        else
    14371493        {       
     1494#if HHI_INTER_COMP_PRED_K0052
     1495          if( m_depthFlag[ curLayerIdInVps ] && ( m_mpiFlag|| m_qtPredFlag || m_intraContourFlag ) )
     1496          {         
     1497            Int nuhLayerIdTex = vps.getLayerIdInNuh( vps.getViewIndex( curLayerIdInNuh ), false );
     1498            if ( nuhLayerIdTex == refLayerIdInNuh )
     1499            {
     1500              for( Int i = 0; i < ( getGOPSize() + 1); i++ )
     1501              {       
     1502                GOPEntry geCur =  m_GOPListMvc[curLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
     1503                GOPEntry geRef =  m_GOPListMvc[refLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
     1504                if ( geCur.m_interCompPredFlag )
     1505                {
     1506                  Bool refLayerZero   = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 );
     1507                  maxTid = std::max( maxTid, refLayerZero ? 0 : geRef.m_temporalId );
     1508                }
     1509              }
     1510            }
     1511          }
     1512          if( !m_depthFlag[ curLayerIdInVps ] && vps.getNumRefListLayers( curLayerIdInNuh) > 0  && ( m_depthRefinementFlag || m_viewSynthesisPredFlag || m_depthBasedBlkPartFlag ) )
     1513          {             
     1514            for( Int i = 0; i < ( getGOPSize() + 1); i++ )
     1515            {       
     1516              GOPEntry geCur =  m_GOPListMvc[curLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
     1517              GOPEntry geRef =  m_GOPListMvc[refLayerIdInVps][( i < getGOPSize()  ? i : MAX_GOP )];
     1518
     1519              if ( geCur.m_interCompPredFlag )
     1520              {
     1521                for (Int j = 0; j < geCur.m_numActiveRefLayerPics; j++ )
     1522                {
     1523                  Int nuhLayerIdDep = vps.getLayerIdInNuh( vps.getViewIndex( vps.getIdRefListLayer( curLayerIdInNuh, geCur.m_interLayerPredLayerIdc[j] ) ), true );
     1524                  if ( nuhLayerIdDep == refLayerIdInNuh )
     1525                  {
     1526                    Bool refLayerZero   = ( i == getGOPSize() ) && ( refLayerIdInVps == 0 );
     1527                    maxTid = std::max( maxTid, refLayerZero ? 0 : geRef.m_temporalId );
     1528                  }
     1529                }
     1530              }
     1531            }
     1532          }       
     1533#else
    14381534          if( m_depthFlag[ curLayerIdInVps ] && ( m_mpiFlag|| m_qtPredFlag || m_intraContourFlag ) )
    14391535          {         
     
    14661562            }
    14671563          }       
     1564#endif
    14681565        }
    1469       }
     1566      } // if ( vps.getDirectDependencyFlag( curLayerIdInVps, refLayerIdInVps ) )
    14701567      vps.setMaxTidIlRefPicsPlus1( refLayerIdInVps, curLayerIdInVps, maxTid + 1 );
    14711568#endif
    1472     }   
    1473   }
     1569    }  // Loop curLayerIdInVps
     1570  } // Loop refLayerIdInVps
    14741571
    14751572  // Max temporal id for inter layer reference pictures presence flag
Note: See TracChangeset for help on using the changeset viewer.