Changeset 758 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComSlice.cpp


Ignore:
Timestamp:
3 Jan 2014, 17:43:40 (10 years ago)
Author:
tech
Message:

Merged HTM-9.1-dev0-MediaTek@757. (3D-HEVC HLS)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibCommon/TComSlice.cpp

    r738 r758  
    782782Void TComSlice::setCamparaSlice( Int** aaiScale, Int** aaiOffset )
    783783
     784#if CAM_HLS_F0136_F0045_F0082
     785  if( m_pcVPS->hasCamParInSliceHeader( m_viewIndex ) )
     786#else
    784787  if( m_pcSPS->hasCamParInSliceHeader() )
     788#endif
    785789  {   
    786790    for( UInt uiBaseViewIndex = 0; uiBaseViewIndex < m_viewIndex; uiBaseViewIndex++ )
     
    18161820    m_vpsDepthModesFlag [i] = false;
    18171821#if H_3D_DIM_DLT
     1822#if !DLT_DIFF_CODING_IN_PPS
    18181823    m_bUseDLTFlag         [i] = false;
    18191824   
     
    18321837    }
    18331838#endif
     1839#endif
    18341840#if H_3D
    18351841    m_ivMvScalingFlag = true;
     
    19021908    if (m_repFormat[ i ] != NULL )      delete m_repFormat[ i ];   
    19031909#if H_3D_DIM_DLT
     1910#if !DLT_DIFF_CODING_IN_PPS
    19041911    if ( m_iDepthValue2Idx[i] != 0 )
    19051912    {
     
    19141921    }
    19151922#endif
    1916   }
     1923#endif
     1924  }
     1925#endif
     1926#if CAM_HLS_F0136_F0045_F0082
     1927  deleteCamPars();
    19171928#endif
    19181929}
    19191930
    19201931#if H_3D_DIM_DLT
     1932#if !DLT_DIFF_CODING_IN_PPS
    19211933  Void TComVPS::setDepthLUTs(Int layerIdInVps, Int* idxToDepthValueTable, Int iNumDepthValues)
    19221934  {
     
    19801992  }
    19811993#endif
     1994#endif
    19821995
    19831996#if H_MV
     
    20662079  return foundLayerIdinNuh;
    20672080}
     2081#if CAM_HLS_F0136_F0045_F0082
     2082Void TComVPS::createCamPars(Int iNumViews)
     2083{
     2084  Int i = 0, j = 0;
     2085
     2086  m_bCamParPresent = new Bool[ iNumViews ];
     2087  m_bCamParInSliceHeader = new Bool[ iNumViews ];
     2088
     2089  m_aaaiCodedScale = new Int**[ iNumViews ];
     2090  m_aaaiCodedOffset = new Int**[ iNumViews ];
     2091  for ( i = 0; i < iNumViews ; i++ )
     2092  {
     2093    m_aaaiCodedScale[i] = new Int*[ 2 ];
     2094    m_aaaiCodedOffset[i] = new Int*[ 2 ];
     2095    for ( j = 0; j < 2; j++ )
     2096    {
     2097      m_aaaiCodedScale[i][j] = new Int[ MAX_NUM_LAYERS ];
     2098      m_aaaiCodedOffset[i][j] = new Int[ MAX_NUM_LAYERS ];
     2099      for ( Int k = 0; k < MAX_NUM_LAYERS; k++ )
     2100      {
     2101        m_aaaiCodedScale[i][j][k] = 0;
     2102        m_aaaiCodedOffset[i][j][k] = 0;
     2103      }
     2104    }
     2105  }
     2106}
     2107
     2108Void TComVPS::deleteCamPars()
     2109{
     2110  Int iNumViews = getNumViews();
     2111  Int i = 0, j = 0;
     2112
     2113  if ( m_bCamParPresent != NULL )
     2114  {
     2115    delete [] m_bCamParPresent;
     2116  }
     2117  if ( m_bCamParInSliceHeader != NULL )
     2118  {
     2119    delete [] m_bCamParInSliceHeader;
     2120  }
     2121
     2122  if ( m_aaaiCodedScale != NULL )
     2123  {
     2124    for ( i = 0; i < iNumViews ; i++ )
     2125    {
     2126      for ( j = 0; j < 2; j++ )
     2127      {
     2128        delete [] m_aaaiCodedScale[i][j];
     2129      }
     2130      delete [] m_aaaiCodedScale[i];
     2131    }
     2132    delete [] m_aaaiCodedScale;
     2133  }
     2134
     2135  if ( m_aaaiCodedOffset != NULL )
     2136  {
     2137    for ( i = 0; i < iNumViews ; i++ )
     2138    {
     2139      for ( j = 0; j < 2; j++ )
     2140      {
     2141        delete [] m_aaaiCodedOffset[i][j];
     2142      }
     2143      delete [] m_aaaiCodedOffset[i];
     2144    }
     2145    delete [] m_aaaiCodedOffset;
     2146  }
     2147}
     2148
     2149
     2150Void
     2151  TComVPS::initCamParaVPS( UInt uiViewIndex, Bool bCamParPresent, UInt uiCamParPrecision, Bool bCamParSlice, Int** aaiScale, Int** aaiOffset )
     2152{
     2153  AOT( uiViewIndex != 0 && !bCamParSlice && ( aaiScale == 0 || aaiOffset == 0 ) ); 
     2154
     2155  m_uiCamParPrecision = ( ( uiViewIndex != 0 )? uiCamParPrecision : 0 );
     2156  m_bCamParPresent[ uiViewIndex ] = (( uiViewIndex != 0 )? bCamParPresent  : false );
     2157  m_bCamParInSliceHeader[ uiViewIndex ]  = ( (uiViewIndex != 0)? bCamParSlice  : false );
     2158
     2159  if( !m_bCamParInSliceHeader[ uiViewIndex ] )
     2160  {
     2161    for( UInt uiBaseViewIndex = 0; uiBaseViewIndex < uiViewIndex; uiBaseViewIndex++ )
     2162    {
     2163      m_aaaiCodedScale [ uiViewIndex ][ 0 ][ uiBaseViewIndex ] = aaiScale [ uiBaseViewIndex ][     uiViewIndex ];
     2164      m_aaaiCodedScale [ uiViewIndex ][ 1 ][ uiBaseViewIndex ] = aaiScale [     uiViewIndex ][ uiBaseViewIndex ];
     2165      m_aaaiCodedOffset[ uiViewIndex ][ 0 ][ uiBaseViewIndex ] = aaiOffset[ uiBaseViewIndex ][     uiViewIndex ];
     2166      m_aaaiCodedOffset[ uiViewIndex ][ 1 ][ uiBaseViewIndex ] = aaiOffset[     uiViewIndex ][ uiBaseViewIndex ];
     2167    }
     2168  }
     2169}
     2170#endif // CAM_HLS_F0136_F0045_F0082
     2171
    20682172#endif // H_3D
    20692173
     
    24442548, m_ppsInferScalingListFlag(false)
    24452549, m_ppsScalingListRefLayerId(0)
     2550#if DLT_DIFF_CODING_IN_PPS
     2551, m_pcDLT(NULL)
     2552#endif
    24462553#endif
    24472554{
     
    24632570  delete m_scalingList;
    24642571}
     2572
     2573#if DLT_DIFF_CODING_IN_PPS
     2574TComDLT::TComDLT()
     2575: m_bDltPresentFlag(false)
     2576, m_iNumDepthViews(0)
     2577, m_uiDepthViewBitDepth(8)
     2578{
     2579  m_uiDepthViewBitDepth = g_bitDepthY;
     2580
     2581  for( Int i = 0; i < MAX_NUM_LAYERS; i++ )
     2582  {
     2583    m_bUseDLTFlag                 [i] = false;
     2584    m_bInterViewDltPredEnableFlag [i] = false;
     2585
     2586    // allocate some memory and initialize with default mapping
     2587    m_iNumDepthmapValues[i] = ((1 << m_uiDepthViewBitDepth)-1)+1;
     2588    m_iBitsPerDepthValue[i] = numBitsForValue(m_iNumDepthmapValues[i]);
     2589
     2590    m_iDepthValue2Idx[i]    = (Int*) xMalloc(Int, m_iNumDepthmapValues[i]);
     2591    m_iIdx2DepthValue[i]    = (Int*) xMalloc(Int, m_iNumDepthmapValues[i]);
     2592
     2593    //default mapping
     2594    for (Int d=0; d<m_iNumDepthmapValues[i]; d++)
     2595    {
     2596      m_iDepthValue2Idx[i][d] = d;
     2597      m_iIdx2DepthValue[i][d] = d;
     2598    }
     2599  }
     2600}
     2601
     2602TComDLT::~TComDLT()
     2603{
     2604  for( Int i = 0; i < MAX_NUM_LAYERS; i++ )
     2605  {
     2606    if ( m_iDepthValue2Idx[i] != NULL )
     2607    {
     2608      xFree( m_iDepthValue2Idx[i] );
     2609      m_iDepthValue2Idx[i] = NULL;
     2610    }
     2611
     2612    if ( m_iIdx2DepthValue[i] != NULL )
     2613    {
     2614      xFree( m_iIdx2DepthValue[i] );
     2615      m_iIdx2DepthValue[i] = NULL;
     2616    }
     2617  }
     2618}
     2619
     2620Void TComDLT::setDepthLUTs(Int layerIdInVps, Int* idxToDepthValueTable, Int iNumDepthValues)
     2621{
     2622  if( idxToDepthValueTable == NULL || iNumDepthValues == 0 ) // default mapping only
     2623    return;
     2624
     2625  // copy idx2DepthValue to internal array
     2626  memcpy(m_iIdx2DepthValue[layerIdInVps], idxToDepthValueTable, iNumDepthValues*sizeof(UInt));
     2627
     2628  UInt uiMaxDepthValue = ((1 << g_bitDepthY)-1);
     2629  for(Int p=0; p<=uiMaxDepthValue; p++)
     2630  {
     2631    Int iIdxDown    = 0;
     2632    Int iIdxUp      = iNumDepthValues-1;
     2633    Bool bFound     = false;
     2634
     2635    // iterate over indices to find lower closest depth
     2636    Int i = 1;
     2637    while(!bFound && i<iNumDepthValues)
     2638    {
     2639      if( m_iIdx2DepthValue[layerIdInVps][i] > p )
     2640      {
     2641        iIdxDown  = i-1;
     2642        bFound    = true;
     2643      }
     2644
     2645      i++;
     2646    }
     2647    // iterate over indices to find upper closest depth
     2648    i = iNumDepthValues-2;
     2649    bFound = false;
     2650    while(!bFound && i>=0)
     2651    {
     2652      if( m_iIdx2DepthValue[layerIdInVps][i] < p )
     2653      {
     2654        iIdxUp  = i+1;
     2655        bFound    = true;
     2656      }
     2657
     2658      i--;
     2659    }
     2660
     2661    // assert monotony
     2662    assert(iIdxDown<=iIdxUp);
     2663
     2664    // assign closer depth value/idx
     2665    if( abs(p-m_iIdx2DepthValue[layerIdInVps][iIdxDown]) < abs(p-m_iIdx2DepthValue[layerIdInVps][iIdxUp]) )
     2666    {
     2667      m_iDepthValue2Idx[layerIdInVps][p] = iIdxDown;
     2668    }
     2669    else
     2670    {
     2671      m_iDepthValue2Idx[layerIdInVps][p] = iIdxUp;
     2672    }
     2673
     2674  }
     2675
     2676  // update DLT variables
     2677  m_iNumDepthmapValues[layerIdInVps] = iNumDepthValues;
     2678  m_iBitsPerDepthValue[layerIdInVps] = numBitsForValue(m_iNumDepthmapValues[layerIdInVps]);
     2679}
     2680
     2681#if H_3D_DELTA_DLT
     2682Void TComDLT::getDeltaDLT( Int layerIdInVps, Int* piDLTInRef, UInt uiDLTInRefNum, Int* piDeltaDLTOut, UInt *puiDeltaDLTOutNum )
     2683{
     2684  Bool abBM0[ 256 ];
     2685  Bool abBM1[ 256 ];
     2686 
     2687  memset( abBM0, 0, sizeof( abBM0 ));
     2688  memset( abBM1, 0, sizeof( abBM1 ));
     2689 
     2690  // convert reference DLT to bit string
     2691  for( Int i = 0; i < uiDLTInRefNum; i++ )
     2692  {
     2693    abBM0[ piDLTInRef[ i ] ] = true;
     2694  }
     2695  // convert internal DLT to bit string
     2696  for( Int i = 0; i < m_iNumDepthmapValues[ layerIdInVps ]; i++ )
     2697  {
     2698    abBM1[ m_iIdx2DepthValue[ layerIdInVps ][ i ] ] = true;
     2699  }
     2700 
     2701  *puiDeltaDLTOutNum = 0;
     2702  for( Int i = 0; i < 256; i++ )
     2703  {
     2704    if( abBM0[ i ] ^ abBM1[ i ] )
     2705    {
     2706      piDeltaDLTOut[ *puiDeltaDLTOutNum ] = i;
     2707      *puiDeltaDLTOutNum = *puiDeltaDLTOutNum + 1;
     2708    }
     2709  }
     2710}
     2711
     2712Void TComDLT::setDeltaDLT( Int layerIdInVps, Int* piDLTInRef, UInt uiDLTInRefNum, Int* piDeltaDLTIn, UInt uiDeltaDLTInNum )
     2713{
     2714  Bool abBM0[ 256 ];
     2715  Bool abBM1[ 256 ];
     2716 
     2717  memset( abBM0, 0, sizeof( abBM0 ));
     2718  memset( abBM1, 0, sizeof( abBM1 ));
     2719 
     2720  // convert reference DLT to bit string
     2721  for( Int i = 0; i < uiDLTInRefNum; i++ )
     2722  {
     2723    abBM0[ piDLTInRef[ i ] ] = true;
     2724  }
     2725  // convert delta DLT to bit string
     2726  for( Int i = 0; i < uiDeltaDLTInNum; i++ )
     2727  {
     2728    abBM1[ piDeltaDLTIn[ i ] ] = true;
     2729  }
     2730 
     2731  Int aiIdx2DepthValue[256];
     2732  UInt uiNumDepthValues = 0;
     2733  memset( aiIdx2DepthValue, 0, sizeof( aiIdx2DepthValue ));
     2734 
     2735  for( Int i = 0; i < 256; i++ )
     2736  {
     2737    if( abBM0[ i ] ^ abBM1[ i ] )
     2738    {
     2739      aiIdx2DepthValue[ uiNumDepthValues++ ] = i;
     2740    }
     2741  }
     2742 
     2743  // update internal tables
     2744  setDepthLUTs(layerIdInVps, aiIdx2DepthValue, uiNumDepthValues);
     2745}
     2746#endif
     2747
     2748#endif
    24652749
    24662750#if H_MV
     
    25252809#endif
    25262810#if H_3D
     2811#if !CAM_HLS_F0136_F0045_F0082
    25272812Void
    25282813TComSPS::initCamParaSPS( UInt uiViewIndex, UInt uiCamParPrecision, Bool bCamParSlice, Int** aaiScale, Int** aaiOffset )
     
    25462831  }
    25472832}
     2833#endif
    25482834#endif
    25492835TComReferencePictureSet::TComReferencePictureSet()
     
    32573543  assert( m_depthToDisparityF != NULL );
    32583544
     3545#if CAM_HLS_F0136_F0045_F0082
     3546  TComVPS* vps = getVPS();
     3547#else
    32593548  TComSPS* sps = getSPS();
    3260 
     3549#endif
     3550
     3551#if CAM_HLS_F0136_F0045_F0082
     3552  Int log2Div = g_bitDepthY - 1 + vps->getCamParPrecision();
     3553  Int viewIndex = getViewIndex();
     3554
     3555  Bool camParaSH = vps->hasCamParInSliceHeader( viewIndex );
     3556
     3557  Int* codScale     = camParaSH ? m_aaiCodedScale [ 0 ] : vps->getCodedScale    ( viewIndex );
     3558  Int* codOffset    = camParaSH ? m_aaiCodedOffset[ 0 ] : vps->getCodedOffset   ( viewIndex );
     3559  Int* invCodScale  = camParaSH ? m_aaiCodedScale [ 1 ] : vps->getInvCodedScale ( viewIndex );
     3560  Int* invCodOffset = camParaSH ? m_aaiCodedOffset[ 1 ] : vps->getInvCodedOffset( viewIndex );
     3561#else
    32613562  Int log2Div = g_bitDepthY - 1 + sps->getCamParPrecision();
    32623563
     
    32673568  Int* invCodScale  = camParaSH ? m_aaiCodedScale [ 1 ] : sps->getInvCodedScale ();
    32683569  Int* invCodOffset = camParaSH ? m_aaiCodedOffset[ 1 ] : sps->getInvCodedOffset();
     3570#endif
    32693571
    32703572  for (Int i = 0; i <= ( getViewIndex() - 1); i++)
     
    37074009  // It is a requirement of bitstream conformance that bitstream partition with index j shall not include
    37084010  // direct or indirect reference layers of any layers in bitstream partition i for any values of i and j
    3709   // in the range of 0 to num_bitstream_partitions[ h ] – 1, inclusive, such that i is less than j.
     4011  // in the range of 0 to num_bitstream_partitions[ h ] ?1, inclusive, such that i is less than j.
    37104012
    37114013  for ( Int partJ = 0; partJ < getNumBitstreamPartitions( h ); partJ++ )
Note: See TracChangeset for help on using the changeset viewer.