Changeset 898 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibEncoder


Ignore:
Timestamp:
6 Oct 2014, 12:50:55 (11 years ago)
Author:
nokia
Message:

implementation for proposal JCTVC-R0042

Location:
branches/SHM-dev/source/Lib/TLibEncoder
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncCavlc.cpp

    r894 r898  
    225225  }
    226226
     227#if !R0042_PROFILE_INDICATION
    227228#if SCALINGLIST_INFERRING
    228229  if( pcPPS->getLayerId() > 0 )
     
    241242  {
    242243#endif
     244#endif
    243245
    244246  WRITE_FLAG( pcPPS->getScalingListPresentFlag() ? 1 : 0,                          "pps_scaling_list_data_present_flag" );
     
    247249    codeScalingList( m_pcSlice->getScalingList() );
    248250  }
    249 
     251#if !R0042_PROFILE_INDICATION
    250252#if SCALINGLIST_INFERRING
    251253  }
     254#endif
    252255#endif
    253256
     
    256259  WRITE_FLAG( pcPPS->getSliceHeaderExtensionPresentFlag() ? 1 : 0, "slice_segment_header_extension_present_flag");
    257260#if P0166_MODIFIED_PPS_EXTENSION
     261#if !R0042_PROFILE_INDICATION
    258262  WRITE_FLAG( pcPPS->getExtensionFlag() ? 1 : 0, "pps_extension_flag" );
     263#else
     264  WRITE_FLAG( pcPPS->getExtensionFlag() ? 1 : 0, "pps_extension_present_flag" );
     265#endif
    259266
    260267  if( pcPPS->getExtensionFlag() )
    261268  {
     269#if !R0042_PROFILE_INDICATION
    262270#if !POC_RESET_IDC
    263271    UInt ppsExtensionTypeFlag[8] = { 0, 1, 0, 0, 0, 0, 0, 0 };
     
    335343#endif
    336344    }
     345#else
     346  WRITE_FLAG( 0, "pps_range_extension_flag" );
     347  WRITE_FLAG( 1, "pps_multilayer_extension_flag" );
     348  WRITE_CODE( 0, 6,  "pps_extension_6bits" );     
     349
     350  WRITE_FLAG( pcPPS->getPocResetInfoPresentFlag() ? 1 : 0, "poc_reset_info_present_flag" );
     351#if SCALINGLIST_INFERRING
     352  WRITE_FLAG( pcPPS->getInferScalingListFlag() ? 1 : 0, "pps_infer_scaling_list_flag" );
     353  if( pcPPS->getInferScalingListFlag() )
     354  {
     355    // The value of pps_scaling_list_ref_layer_id shall be in the range of 0 to 62, inclusive
     356    assert( pcPPS->getScalingListRefLayerId() <= 62 );
     357    WRITE_UVLC( pcPPS->getScalingListRefLayerId(), "pps_scaling_list_ref_layer_id" );
     358  }
     359#endif
     360
     361#if REF_REGION_OFFSET
     362  WRITE_UVLC( pcPPS->getNumScaledRefLayerOffsets(),      "num_ref_loc_offsets" );
     363  for(Int i = 0; i < pcPPS->getNumScaledRefLayerOffsets(); i++)
     364  {
     365    WRITE_CODE( pcPPS->getScaledRefLayerId(i), 6, "ref_loc_offset_layer_id" );
     366    WRITE_FLAG( pcPPS->getScaledRefLayerOffsetPresentFlag(i) ? 1 : 0, "scaled_ref_layer_offset_prsent_flag" );
     367    if (pcPPS->getScaledRefLayerOffsetPresentFlag(i))
     368    {
     369      Window scaledWindow = pcPPS->getScaledRefLayerWindow(i);
     370      WRITE_SVLC( scaledWindow.getWindowLeftOffset()   >> 1, "scaled_ref_layer_left_offset" );
     371      WRITE_SVLC( scaledWindow.getWindowTopOffset()    >> 1, "scaled_ref_layer_top_offset" );
     372      WRITE_SVLC( scaledWindow.getWindowRightOffset()  >> 1, "scaled_ref_layer_right_offset" );
     373      WRITE_SVLC( scaledWindow.getWindowBottomOffset() >> 1, "scaled_ref_layer_bottom_offset" );
     374    }
     375    WRITE_FLAG( pcPPS->getRefRegionOffsetPresentFlag(i) ? 1 : 0, "ref_region_offset_prsent_flag" );
     376    if (pcPPS->getRefRegionOffsetPresentFlag(i))
     377    {
     378      Window refWindow = pcPPS->getRefLayerWindow(i);
     379      WRITE_SVLC( refWindow.getWindowLeftOffset()   >> 1, "ref_region_left_offset" );
     380      WRITE_SVLC( refWindow.getWindowTopOffset()    >> 1, "ref_region_top_offset" );
     381      WRITE_SVLC( refWindow.getWindowRightOffset()  >> 1, "ref_region_right_offset" );
     382      WRITE_SVLC( refWindow.getWindowBottomOffset() >> 1, "ref_region_bottom_offset" );
     383    }
     384#if R0209_GENERIC_PHASE
     385    WRITE_FLAG( pcPPS->getResamplePhaseSetPresentFlag(i) ? 1 : 0, "resample_phase_set_present_flag" );
     386    if (pcPPS->getResamplePhaseSetPresentFlag(i))
     387    {
     388      WRITE_UVLC( pcPPS->getPhaseHorLuma(i), "phase_hor_luma" );
     389      WRITE_UVLC( pcPPS->getPhaseVerLuma(i), "phase_ver_luma" );
     390      WRITE_UVLC( pcPPS->getPhaseHorChroma(i) + 8, "phase_hor_chroma_plus8" );
     391      WRITE_UVLC( pcPPS->getPhaseVerChroma(i) + 8, "phase_ver_chroma_plus8" );
     392    }
     393#endif
     394  }
     395#else
     396#if MOVE_SCALED_OFFSET_TO_PPS
     397  WRITE_UVLC( pcPPS->getNumScaledRefLayerOffsets(),      "num_scaled_ref_layer_offsets" );
     398  for(Int i = 0; i < pcPPS->getNumScaledRefLayerOffsets(); i++)
     399  {
     400    Window scaledWindow = pcPPS->getScaledRefLayerWindow(i);
     401#if O0098_SCALED_REF_LAYER_ID
     402    WRITE_CODE( pcPPS->getScaledRefLayerId(i), 6,          "scaled_ref_layer_id" );
     403#endif
     404    WRITE_SVLC( scaledWindow.getWindowLeftOffset()   >> 1, "scaled_ref_layer_left_offset" );
     405    WRITE_SVLC( scaledWindow.getWindowTopOffset()    >> 1, "scaled_ref_layer_top_offset" );
     406    WRITE_SVLC( scaledWindow.getWindowRightOffset()  >> 1, "scaled_ref_layer_right_offset" );
     407    WRITE_SVLC( scaledWindow.getWindowBottomOffset() >> 1, "scaled_ref_layer_bottom_offset" );
     408  }
     409#endif
     410#endif
     411#if Q0048_CGS_3D_ASYMLUT
     412  UInt uiPos = getNumberOfWrittenBits();
     413  WRITE_FLAG( pcPPS->getCGSFlag() , "colour_mapping_enabled_flag" );
     414  if( pcPPS->getCGSFlag() )
     415  {
     416    assert( pc3DAsymLUT != NULL );
     417    xCode3DAsymLUT( pc3DAsymLUT );
     418  }
     419  pc3DAsymLUT->setPPSBit( getNumberOfWrittenBits() - uiPos );
     420#endif
     421#endif
    337422  }
    338423#else
     
    502587Void TEncCavlc::codeSPS( TComSPS* pcSPS )
    503588{
     589#if R0042_PROFILE_INDICATION
     590  bool bMultiLayerExtSpsFlag = (pcSPS->getNumDirectRefLayers() != 0 ) ;
     591#endif
    504592#if ENC_DEC_TRACE 
    505593  xTraceSPSHeader (pcSPS);
     
    511599#endif
    512600    WRITE_CODE( pcSPS->getMaxTLayers() - 1,  3,       "sps_max_sub_layers_minus1" );
     601#if SVC_EXTENSION
     602  }
     603#if R0042_PROFILE_INDICATION
     604  else
     605  {
     606    WRITE_CODE(bMultiLayerExtSpsFlag? 7:(pcSPS->getMaxTLayers() - 1) ,  3,       "sps_ext_or_max_sub_layers_minus1" );
     607  }
     608#endif
     609#endif
     610
     611#if SVC_EXTENSION
     612#if !R0042_PROFILE_INDICATION
     613  if(pcSPS->getLayerId() == 0)
     614#else
     615  if(!bMultiLayerExtSpsFlag)
     616#endif
     617  {
     618#endif
    513619    WRITE_FLAG( pcSPS->getTemporalIdNestingFlag() ? 1 : 0,                             "sps_temporal_id_nesting_flag" );
    514620#if SVC_EXTENSION
     
    516622#endif
    517623#ifdef SPS_PTL_FIX
     624#if !R0042_PROFILE_INDICATION
    518625  if (pcSPS->getLayerId() == 0)
     626#else
     627  if(!bMultiLayerExtSpsFlag)
     628#endif
    519629  {
    520630    codePTL(pcSPS->getPTL(), 1, pcSPS->getMaxTLayers() - 1);
     
    525635  WRITE_UVLC( pcSPS->getSPSId (),                   "sps_seq_parameter_set_id" );
    526636#if REPN_FORMAT_IN_VPS
     637#if !R0042_PROFILE_INDICATION
    527638  if( pcSPS->getLayerId() > 0 )
     639#else
     640  if(bMultiLayerExtSpsFlag)
     641#endif
    528642  {
    529643    WRITE_FLAG( pcSPS->getUpdateRepFormatFlag(), "update_rep_format_flag" );
    530644  }
     645#if R0042_PROFILE_INDICATION
     646  if( bMultiLayerExtSpsFlag && pcSPS->getUpdateRepFormatFlag())
     647  {
     648    WRITE_CODE( pcSPS->getUpdateRepFormatIndex(), 8,   "sps_rep_format_idx");
     649  }
     650#endif
     651
     652#if R0042_PROFILE_INDICATION
     653  if(!bMultiLayerExtSpsFlag)
     654  {
     655#endif
     656#if !R0042_PROFILE_INDICATION
    531657#if O0096_REP_FORMAT_INDEX
    532658  if( pcSPS->getLayerId() == 0 )
    533659#else
    534660  if( pcSPS->getLayerId() == 0 || pcSPS->getUpdateRepFormatFlag() )
     661#endif
    535662#endif
    536663  {
     
    548675#if REPN_FORMAT_IN_VPS
    549676  }
     677#if !R0042_PROFILE_INDICATION
    550678#if O0096_REP_FORMAT_INDEX
    551679  else if (pcSPS->getUpdateRepFormatFlag())
     
    555683#endif
    556684#endif
     685#endif
    557686
    558687#if R0156_CONF_WINDOW_IN_REP_FORMAT
    559688#if REPN_FORMAT_IN_VPS
     689#if !R0042_PROFILE_INDICATION
    560690#if O0096_REP_FORMAT_INDEX
    561691  if( pcSPS->getLayerId() == 0 )
     
    563693  if( pcSPS->getLayerId() == 0 || pcSPS->getUpdateRepFormatFlag() )
    564694#endif 
     695#endif
    565696  {
    566697#endif
     
    590721
    591722#if REPN_FORMAT_IN_VPS
     723#if !R0042_PROFILE_INDICATION
    592724#if O0096_REP_FORMAT_INDEX
    593725  if( pcSPS->getLayerId() == 0 )
    594726#else
    595727  if( pcSPS->getLayerId() == 0 || pcSPS->getUpdateRepFormatFlag() )
    596 #endif 
     728#endif
     729#endif
    597730  {
    598731    assert( pcSPS->getBitDepthY() >= 8 );
     
    604737  }
    605738#endif
     739#if R0042_PROFILE_INDICATION
     740  }
     741#endif
     742
    606743  WRITE_UVLC( pcSPS->getBitsForPOC()-4,                 "log2_max_pic_order_cnt_lsb_minus4" );
    607744
    608745#if SPS_DPB_PARAMS
     746#if !R0042_PROFILE_INDICATION
    609747  if( pcSPS->getLayerId() == 0 )
     748#else
     749  if(!bMultiLayerExtSpsFlag)
     750#endif
    610751  {
    611752#endif
     
    637778  {
    638779#if SCALINGLIST_INFERRING
     780#if !R0042_PROFILE_INDICATION
    639781    if( pcSPS->getLayerId() > 0 )
     782#else
     783    if( bMultiLayerExtSpsFlag)
     784#endif
    640785    {
    641786      WRITE_FLAG( pcSPS->getInferScalingListFlag() ? 1 : 0, "sps_infer_scaling_list_flag" );
     
    706851
    707852#if SVC_EXTENSION
     853#if !R0042_PROFILE_INDICATION
    708854  WRITE_FLAG( pcSPS->getExtensionFlag() ? 1 : 0, "sps_extension_flag" );
     855#else
     856  WRITE_FLAG( pcSPS->getExtensionFlag() ? 1 : 0, "sps_extension_present_flag" );
     857#endif
    709858
    710859  if( pcSPS->getExtensionFlag() )
    711860  {
     861#if !R0042_PROFILE_INDICATION
    712862#if O0142_CONDITIONAL_SPS_EXTENSION
    713863    UInt spsExtensionTypeFlag[8] = { 0, 1, 0, 0, 0, 0, 0, 0 };
     
    723873    codeSPSExtension( pcSPS );
    724874    WRITE_FLAG( 0, "sps_extension2_flag" );
     875#endif
     876#else
     877    WRITE_FLAG( 0, "sps_range_extension_flag" );
     878    WRITE_FLAG( 1, "sps_multilayer_extension_flag" );
     879    WRITE_CODE( 0, 6,  "sps_extension_6bits" );   
     880    codeSPSExtension( pcSPS ); //it is sps_multilayer_extension
    725881#endif
    726882  }
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncTop.cpp

    r894 r898  
    985985#if SVC_EXTENSION
    986986  m_cSPS.setExtensionFlag( m_layerId > 0 ? true : false );
    987 
     987#if R0042_PROFILE_INDICATION
     988  m_cSPS.setNumDirectRefLayers(m_numAddLayerSets);
     989#endif
    988990#if Q0078_ADD_LAYER_SETS
    989991  if( !m_numDirectRefLayers && m_numAddLayerSets )
Note: See TracChangeset for help on using the changeset viewer.