Ignore:
Timestamp:
15 Mar 2014, 08:37:13 (10 years ago)
Author:
qualcomm
Message:

POC-related in slice header (Macro: H_MV_HLS_7_POC_P0041)

POC-related signaling in slice header tested and included. Decoding process and encoder assignment in a later patch.

From: Adarsh K. Ramasubramonian <aramasub@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-10.0-dev0/source/Lib/TLibEncoder/TEncCavlc.cpp

    r866 r867  
    22472247#endif
    22482248
    2249 #if !H_MV_HLS7_GEN
     2249#if !H_MV_HLS_7_POC_P0041
    22502250#if PPS_FIX_DEPTH
    22512251  if(pcSlice->getPPS()->getSliceHeaderExtensionPresentFlag() || pcSlice->getIsDepth() )
     
    22582258#endif
    22592259
    2260 #if H_MV_HLS7_GEN
     2260#if H_MV_HLS_7_POC_P0041
    22612261#if !H_MV
    22622262  if(pcSlice->getPPS()->getSliceHeaderExtensionPresentFlag())
     
    22672267  if(pcSlice->getPPS()->getSliceHeaderExtensionPresentFlag())
    22682268  {
     2269    // Derive the value of PocMsbValRequiredFlag
     2270    pcSlice->setPocMsbValRequiredFlag( pcSlice->getCraPicFlag() || pcSlice->getBlaPicFlag()
     2271                                          /* || related to vps_poc_lsb_aligned_flag */
     2272                                          );
     2273
     2274    // Determine value of SH extension length.
     2275    Int shExtnLengthInBit = 0;
     2276    if (pcSlice->getPPS()->getPocResetInfoPresentFlag())
     2277    {
     2278      shExtnLengthInBit += 2;
     2279    }
     2280    if (pcSlice->getPocResetIdc() > 0)
     2281    {
     2282      shExtnLengthInBit += 6;
     2283    }
     2284    if (pcSlice->getPocResetIdc() == 3)
     2285    {
     2286      shExtnLengthInBit += (pcSlice->getSPS()->getBitsForPOC() + 1);
     2287    }
     2288
     2289
     2290    if( !pcSlice->getPocMsbValRequiredFlag() /* TODO &&  pcSlice->getVPS()->getVpsPocLsbAlignedFlag() */ )
     2291    {
     2292      shExtnLengthInBit++;    // For poc_msb_val_present_flag
     2293    }
     2294    else
     2295    {
     2296      if( pcSlice->getPocMsbValRequiredFlag() )
     2297      {
     2298        pcSlice->setPocMsbValPresentFlag( true );
     2299      }
     2300      else
     2301      {
     2302        pcSlice->setPocMsbValPresentFlag( false );
     2303      }
     2304    }
     2305
     2306    if( pcSlice->getPocMsbValPresentFlag() )
     2307    {
     2308      Int iMaxPOClsb = 1<< pcSlice->getSPS()->getBitsForPOC();
     2309
     2310      UInt lengthVal = 1;
     2311      UInt tempVal = pcSlice->getPocMsbVal() + 1;
     2312      assert ( tempVal );
     2313      while( 1 != tempVal )
     2314      {
     2315        tempVal >>= 1;
     2316        lengthVal += 2;
     2317      }
     2318      shExtnLengthInBit += lengthVal;
     2319    }
     2320    Int shExtnAdditionalBits = 0;
     2321    if(shExtnLengthInBit % 8 != 0)
     2322    {
     2323      shExtnAdditionalBits = 8 - (shExtnLengthInBit % 8);
     2324    }
     2325    pcSlice->setSliceSegmentHeaderExtensionLength((shExtnLengthInBit + shExtnAdditionalBits) / 8);
     2326     
     2327
    22692328    WRITE_UVLC( pcSlice->getSliceSegmentHeaderExtensionLength( ), "slice_segment_header_extension_length" );
    22702329    UInt posFollSliceSegHeaderExtLen = m_pcBitIf->getNumberOfWrittenBits();
     
    22732332      WRITE_CODE( pcSlice->getPocResetIdc( ), 2, "poc_reset_idc" );
    22742333    }
     2334    else
     2335    {
     2336      assert( pcSlice->getPocResetIdc( ) == 0 );
     2337    }
    22752338
    22762339    if( pcSlice->getPocResetIdc() !=  0 )
     
    22822345    {
    22832346      WRITE_FLAG( pcSlice->getFullPocResetFlag( ) ? 1 : 0 , "full_poc_reset_flag" );
    2284       WRITE_CODE( pcSlice->getPocLsbVal( ), getPocLsbValLen ), "poc_lsb_val" );
     2347      WRITE_CODE( pcSlice->getPocLsbVal( ), pcSlice->getPocLsbValLen() , "poc_lsb_val" );
    22852348    }             
    22862349   
    2287     if( !pcSlice->getPocMsbValRequiredFlag() &&  pcSlice->getVPS()->getVpsPocLsbAlignedFlag() )
     2350    if( !pcSlice->getPocMsbValRequiredFlag() /* TODO &&  pcSlice->getVPS()->getVpsPocLsbAlignedFlag() */ )
    22882351    {
    22892352      WRITE_FLAG( pcSlice->getPocMsbValPresentFlag( ) ? 1 : 0 , "poc_msb_val_present_flag" );
     
    22942357      WRITE_UVLC( pcSlice->getPocMsbVal( ), "poc_msb_val" );
    22952358    }
    2296 
    2297     while( ( m_pcBitIf->getNumberOfWrittenBits() - posFollSliceSegHeaderExtLen ) < pcSlice->getSliceSegmentHeaderExtensionLength() * 8 );
     2359   
     2360    while( ( m_pcBitIf->getNumberOfWrittenBits() - posFollSliceSegHeaderExtLen ) < pcSlice->getSliceSegmentHeaderExtensionLength() * 8 )
    22982361    {
    22992362      WRITE_FLAG( 0, "slice_segment_header_extension_data_bit" );
    23002363    }
    23012364
    2302     assert( m_pcBitIf->getNumberOfWrittenBits() - posFollSliceSegHeaderExtLen ) == pcSlice->getSliceSegmentHeaderExtensionLength() * 8  );
     2365    assert( ( m_pcBitIf->getNumberOfWrittenBits() - posFollSliceSegHeaderExtLen ) == pcSlice->getSliceSegmentHeaderExtensionLength() * 8  );
     2366  }
    23032367#endif
    2304 
    23052368#endif
    23062369}
Note: See TracChangeset for help on using the changeset viewer.