Changeset 1356 in 3DVCSoftware for trunk/source/Lib/TLibCommon


Ignore:
Timestamp:
27 Oct 2015, 11:33:16 (9 years ago)
Author:
tech
Message:

Merged 15.1-dev0-NICT@1355.

Location:
trunk/source/Lib/TLibCommon
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibCommon/CommonDef.h

    r1322 r1356  
    173173#if NH_MV
    174174static const Int MAX_NUM_LAYER_IDS =                               63;
     175#if NH_MV_SEI
     176static const Int MAX_NUM_SEIS      =                               1000;
     177#endif
    175178#else
    176179static const Int MAX_NUM_LAYER_IDS =                               64;
     
    280283static const Int  MAX_NUM_PICS_RPS          =                     16 ;
    281284static const Int  MAX_NUM_REF_LAYERS        =                     63 ; 
     285#if NH_MV_SEI
     286static IntAry1d getRangeVec( Int rngStart, Int rngEnd ) { IntAry1d rng; for (Int i = rngStart; i<=rngEnd; i++) rng.push_back(i);  return rng; };
     287static const IntAry1d IDR_NAL_UNIT_TYPES   = getRangeVec( NAL_UNIT_CODED_SLICE_IDR_W_RADL, NAL_UNIT_CODED_SLICE_IDR_N_LP );
     288static const IntAry1d IRAP_NAL_UNIT_TYPES  = getRangeVec( NAL_UNIT_CODED_SLICE_BLA_W_LP  , NAL_UNIT_CODED_SLICE_CRA      );
     289
     290#endif
    282291#endif
    283292
  • trunk/source/Lib/TLibCommon/SEI.cpp

    r1313 r1356  
    3232 */
    3333
    34 /** \file     SEI.cpp
     34/** \file     #SEI.cpp
    3535    \brief    helper functions for SEI handling
    3636*/
     
    3838#include "CommonDef.h"
    3939#include "SEI.h"
     40#if NH_MV_SEI
     41#include "TComSlice.h"
     42#endif
    4043
    4144SEIMessages getSeisByType(SEIMessages &seiList, SEI::PayloadType seiType)
     
    150153    case SEI::CHROMA_SAMPLING_FILTER_HINT:          return "Chroma sampling filter hint";
    151154#if NH_MV
    152     case SEI::SUB_BITSTREAM_PROPERTY:               return "Sub-bitstream property SEI message";     
     155    case SEI::COLOUR_REMAPPING_INFO:                     return "Colour remapping information";
     156    case SEI::DEINTERLACED_FIELD_IDENTIFICATION:         return "Deinterlaced field identification";
     157    case SEI::LAYERS_NOT_PRESENT:                        return "Layers not present";
     158    case SEI::INTER_LAYER_CONSTRAINED_TILE_SETS:         return "Inter-layer constrained tile sets";
     159    case SEI::BSP_NESTING:                               return "Bitstream partition nesting";
     160    case SEI::BSP_INITIAL_ARRIVAL_TIME:                  return "Bitstream partition initial arrival time";
     161    case SEI::SUB_BITSTREAM_PROPERTY:                    return "Sub-bitstream property";
     162    case SEI::ALPHA_CHANNEL_INFO:                        return "Alpha channel information";
     163    case SEI::OVERLAY_INFO:                              return "Overlay information"  ;
     164    case SEI::TEMPORAL_MV_PREDICTION_CONSTRAINTS:        return "Temporal motion vector prediction constraints";
     165    case SEI::FRAME_FIELD_INFO:                          return "Frame-field information";
     166    case SEI::THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO: return "3D reference displays information";
     167    case SEI::DEPTH_REPRESENTATION_INFO:                 return "Depth representation information";
     168    case SEI::MULTIVIEW_SCENE_INFO:                      return "Multiview scene information";
     169    case SEI::MULTIVIEW_ACQUISITION_INFO:                return "Multiview acquisition information";
     170    case SEI::MULTIVIEW_VIEW_POSITION:                   return "Multiview view position";
     171#if NH_3D
     172    case SEI::ALTERNATIVE_DEPTH_INFO:                    return "Alternative depth information";
     173#endif
    153174#endif
    154175    default:                                        return "Unknown";
    155176  }
    156177}
     178
     179#if NH_MV_SEI
     180SEI::SEI()
     181{
     182  m_scalNestSeiContThisSei = NULL;
     183}
     184
     185SEI* SEI::getNewSEIMessage(SEI::PayloadType payloadType)
     186{
     187  switch (payloadType)
     188  {
     189#if NH_MV_SEI_TBD
     190    //////////////////////////////////////////////////////////////////////////
     191    // TBD: Modify version 1 SEIs to use the same interfaces as Annex GFI SEI messages.
     192    //////////////////////////////////////////////////////////////////////////
     193
     194    case SEI::BUFFERING_PERIOD:                     return new SEIBufferingPeriod;
     195    case SEI::PICTURE_TIMING:                       return new SEIPictureTiming;
     196    case SEI::PAN_SCAN_RECT:                        return new SEIPanScanRectangle;                    // not currently decoded
     197    case SEI::FILLER_PAYLOAD:                       return new SEIFillerPaylod;                       // not currently decoded
     198    case SEI::USER_DATA_REGISTERED_ITU_T_T35:       return new SEIUserDataRegistered;                 // not currently decoded
     199    case SEI::USER_DATA_UNREGISTERED:               return new SEIuserDataUnregistered;
     200    case SEI::RECOVERY_POINT:                       return new SEIRecoveryPoint;
     201    case SEI::SCENE_INFO:                           return new SEISceneInformation;                    // not currently decoded
     202    case SEI::FULL_FRAME_SNAPSHOT:                  return new SEIPictureSnapshot;                     // not currently decoded
     203    case SEI::PROGRESSIVE_REFINEMENT_SEGMENT_START: return new SEIProgressiveRefinementSegmentStart;   // not currently decoded
     204    case SEI::PROGRESSIVE_REFINEMENT_SEGMENT_END:   return new SEIProgressiveRefinementSegmentEnd;     // not currently decoded
     205    case SEI::FILM_GRAIN_CHARACTERISTICS:           return new SEIFilmGrainCharacteristics;            // not currently decoded
     206    case SEI::POST_FILTER_HINT:                     return new SEIPostFilterHint;                      // not currently decoded
     207    case SEI::TONE_MAPPING_INFO:                    return new SEIToneMappingInfo;
     208    case SEI::KNEE_FUNCTION_INFO:                   return new SEIKneeFunctionInfo;
     209    case SEI::FRAME_PACKING:                        return new SEIFramePacking;
     210    case SEI::DISPLAY_ORIENTATION:                  return new SEIDisplayOrientation;
     211    case SEI::SOP_DESCRIPTION:                      return new SEISOPDescription;
     212    case SEI::ACTIVE_PARAMETER_SETS:                return new SEIActiveParameterSets;
     213    case SEI::DECODING_UNIT_INFO:                   return new SEIDecodingUnitInfo;
     214    case SEI::TEMPORAL_LEVEL0_INDEX:                return new SEITemporalLevel0Index
     215    case SEI::DECODED_PICTURE_HASH:                 return new SEIDecodedPictureHash;
     216    case SEI::SCALABLE_NESTING:                     return new SEIScalableNesting;
     217    case SEI::REGION_REFRESH_INFO:                  return new SEIRegionRefreshInfo;
     218    case SEI::NO_DISPLAY:                           return new SEINoDisplay;
     219    case SEI::TIME_CODE:                            return new SEITimeCode;
     220    case SEI::MASTERING_DISPLAY_COLOUR_VOLUME:      return new SEIMasteringDisplayColourVolume;
     221    case SEI::SEGM_RECT_FRAME_PACKING:              return new SEISegmentedRectFramePacking;
     222    case SEI::TEMP_MOTION_CONSTRAINED_TILE_SETS:    return new SEITempMotionConstrainedTileSets;
     223    case SEI::CHROMA_SAMPLING_FILTER_HINT:          return new SEIChromaSamplingFilterHint
     224#endif
     225#if NH_MV_SEI
     226#if NH_MV_LAYERS_NOT_PRESENT_SEI
     227  case SEI::LAYERS_NOT_PRESENT                    :               return new SEILayersNotPresent;
     228#endif
     229  case SEI::INTER_LAYER_CONSTRAINED_TILE_SETS     :               return new SEIInterLayerConstrainedTileSets;
     230#if NH_MV_SEI_TBD
     231  case SEI::BSP_NESTING                           :               return new SEIBspNesting;
     232  case SEI::BSP_INITIAL_ARRIVAL_TIME              :               return new SEIBspInitialArrivalTime;
     233#endif
     234  case SEI::SUB_BITSTREAM_PROPERTY                :               return new SEISubBitstreamProperty;
     235  case SEI::ALPHA_CHANNEL_INFO                    :               return new SEIAlphaChannelInfo;
     236  case SEI::OVERLAY_INFO                          :               return new SEIOverlayInfo;
     237  case SEI::TEMPORAL_MV_PREDICTION_CONSTRAINTS    :               return new SEITemporalMvPredictionConstraints;
     238#if NH_MV_SEI_TBD
     239  case SEI::FRAME_FIELD_INFO                      :               return new SEIFrameFieldInfo;
     240#endif
     241  case SEI::THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO:            return new SEIThreeDimensionalReferenceDisplaysInfo;
     242#if SEI_DRI_F0169
     243  case SEI::DEPTH_REPRESENTATION_INFO             :               return new SEIDepthRepresentationInfo;
     244#endif
     245  case SEI::MULTIVIEW_SCENE_INFO                  :               return new SEIMultiviewSceneInfo;
     246  case SEI::MULTIVIEW_ACQUISITION_INFO            :               return new SEIMultiviewAcquisitionInfo;
     247  case SEI::MULTIVIEW_VIEW_POSITION               :               return new SEIMultiviewViewPosition;
     248#if NH_3D
     249  case SEI::ALTERNATIVE_DEPTH_INFO                :               return new SEIAlternativeDepthInfo;
     250#endif
     251#endif
     252  default:                                        assert( false ); return NULL;
     253  }
     254}
     255
     256Void SEI::setupFromSlice  ( const TComSlice* slice )
     257{
     258  xPrintCfgErrorIntro();
     259  std::cout << getSEIMessageString( payloadType() ) << "Setup by the encoder is currently not possible. Using the default SEI cfg-file." << std::endl;
     260}
     261
     262SEI* SEI::getCopy() const
     263{
     264  assert( 0 );
     265  return NULL;
     266}
     267
     268Void SEI::setupFromCfgFile( const Char* cfgFile )
     269{
     270  assert( false );
     271}
     272
     273Bool SEI::insertSei( Int curLayerId, Int curPoc, Int curTid, Int curNaluType ) const
     274{
     275  Bool insertSeiHere = true;
     276  if( !m_applicableLayerIds.empty() )
     277  {
     278    insertSeiHere = insertSeiHere && ( std::find( m_applicableLayerIds.begin(), m_applicableLayerIds.end(), curLayerId) != m_applicableLayerIds.end() ) ;
     279  }
     280  if( !m_applicablePocs     .empty() )
     281  {
     282    insertSeiHere = insertSeiHere && ( std::find( m_applicablePocs    .begin(), m_applicablePocs    .end(), curPoc    ) != m_applicablePocs    .end() ) ;
     283  }
     284  if( !m_applicableTids     .empty() )
     285  {
     286    insertSeiHere = insertSeiHere && ( std::find( m_applicableTids    .begin(), m_applicableTids    .end(), curTid    ) != m_applicableTids    .end() ) ;
     287  }
     288  if( !m_applicableVclNaluTypes.empty() )
     289  {
     290    insertSeiHere = insertSeiHere && ( std::find( m_applicableVclNaluTypes.begin(), m_applicableVclNaluTypes.end(), curNaluType) != m_applicableVclNaluTypes.end() ) ;
     291  }
     292  return insertSeiHere;
     293}
     294
     295Bool SEI::checkCfg( const TComSlice* slice )
     296{
     297  assert( false );
     298  return true;
     299}
     300
     301Void SEI::xPrintCfgErrorIntro()
     302{
     303  std::cout << "Error in configuration of " << getSEIMessageString( payloadType() ) << " SEI: ";
     304}
     305
     306Void SEI::xCheckCfgRange( Bool& wrongConfig, Int val, Int minVal, Int maxVal, const Char* seName )
     307{
     308  if ( val < minVal || val > maxVal  )
     309  {
     310    xPrintCfgErrorIntro();
     311    std::cout << "The value of " << seName << "shall be in the range of " << minVal << " to " << maxVal << ", inclusive." << std::endl;
     312    wrongConfig = true;
     313  }
     314}
     315
     316Void SEI::xAddGeneralOpts(po::Options &opts, IntAry1d defAppLayerIds, IntAry1d deftApplicablePocs,
     317                                            IntAry1d defAppTids,     IntAry1d defAppVclNaluTypes,
     318                                            Int defSeiNaluId, Int defPositionInSeiNalu, Bool defModifyByEncoder)
     319{
     320  opts.addOptions()
     321    ("PayloadType"            , m_payloadType            , -1                    , "Payload Type"                                                         )
     322    ("ApplicableLayerIds"     , m_applicableLayerIds     , defAppLayerIds        , "LayerIds      of layers   to which the SEI is added. (all when empty)")
     323    ("ApplicablePocs"         , m_applicablePocs         , deftApplicablePocs    , "POCs          of pictures to which the SEI is added. (all when empty)")
     324    ("ApplicableTids"         , m_applicableTids         , defAppTids            , "TIds          of pictures to which the SEI is added. (all when empty)")
     325    ("ApplicableVclNaluTypes" , m_applicableVclNaluTypes , defAppVclNaluTypes    , "NaluUnitTypes of picture  to which the SEI is added. (all when empty)")
     326    ("SeiNaluId"              , m_seiNaluId              , defSeiNaluId          , "Identifies to which NAL unit  the SEI is added." )
     327    ("PositionInSeiNalu"      , m_positionInSeiNalu      , defPositionInSeiNalu  , "Identifies the position within the NAL unit.")
     328    ("ModifyByEncoder"        , m_modifyByEncoder        , defModifyByEncoder    , "0: Use payload as specified in cfg file   1: Modify SEI by encoder");
     329}
     330
     331Void SEI::xCheckCfg( Bool& wrongConfig, Bool cond, const Char* errStr )
     332{
     333  if ( !cond  )
     334  {
     335    xPrintCfgErrorIntro();
     336    std::cout << errStr << std::endl;
     337    wrongConfig = true;
     338  }
     339}
     340
     341
     342#if NH_MV_LAYERS_NOT_PRESENT_SEI
     343Void SEILayersNotPresent::setupFromCfgFile(const Char* cfgFile)
     344{
     345  // Set default values
     346  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     347
     348  // TBD: Add default values for which layers, POCS, Tids or Nalu types the SEI should be send.
     349  // This SEI message doesn't need to be added by default to any Layer / POC / NAL Unit / T Layer. Not sure if empty is right.
     350  defAppLayerIds    .empty( );
     351  defAppPocs        .empty( );
     352  defAppTids        .empty( );
     353  defAppVclNaluTypes.empty( );
     354
     355  Int      defSeiNaluId                  = 0;
     356  Int      defPositionInSeiNalu          = 0;
     357  Bool     defModifyByEncoder            = false;   //0: Use payload as specified in cfg file   1: Modify SEI by encoder
     358
     359  // Setup config file options
     360  po::Options opts;
     361  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     362
     363  opts.addOptions()
     364    ("LnpSeiActiveVpsId"              , m_lnpSeiActiveVpsId                , 0                              , "LnpSeiActiveVpsId"                )   //Why?
     365    ("LayerNotPresentFlag"            , m_layerNotPresentFlag              , BoolAry1d(1,0)                 , "LayerNotPresentFlag"              )
     366    ;
     367
     368  po::setDefaults(opts);
     369
     370  // Parse the cfg file
     371  po::ErrorReporter err;
     372  po::parseConfigFile( opts, cfgFile, err );
     373  m_lnpSeiMaxLayers = (UInt) m_layerNotPresentFlag.size();
     374};
     375
     376  Bool SEILayersNotPresent::checkCfg( const TComSlice* slice )
     377  {
     378  // Check config values
     379    Bool wrongConfig = false;
     380//
     381    const TComVPS* vps = slice->getVPS();
     382//  // TBD: Add constraints on presence of SEI here.
     383    xCheckCfg     ( wrongConfig, m_lnpSeiActiveVpsId == vps->getVPSId(), "The value of lnp_sei_active_vps_id shall be equal to the value of vps_video_parameter_set_id of the active VPS for the VCL NAL units of the access unit containing the SEI message." );
     384    xCheckCfg     ( wrongConfig, m_lnpSeiMaxLayers == vps->getMaxLayersMinus1(), "The number of LayerNotPresent flags shall be equal to vpsMaxLayersMinus1." );
     385
     386
     387    for (Int i = 0; i < vps->getMaxLayersMinus1(); i++)
     388    {
     389      if ( m_layerNotPresentFlag[ i ] && i < vps->getMaxLayersMinus1() )
     390      {
     391        for (Int j = 0; j < vps->getNumPredictedLayers( vps->getLayerIdInNuh( j ) - 1 ); j++ )
     392        {
     393          xCheckCfg     ( wrongConfig, m_layerNotPresentFlag[ vps->getLayerIdInVps( vps->getIdPredictedLayer( vps->getLayerIdInNuh(i),j) )], "When layer_not_present_flag[ i ] is equal to 1 and i is less than MaxLayersMinus1, layer_not_present_flag[ LayerIdxInVps[ IdPredictedLayer[ layer_id_in_nuh[ i ] ][ j ] ] ] shall be equal to 1 for all values of j in the range of 0 to NumPredictedLayers[ layer_id_in_nuh[ i ] ] - 1, inclusive." );
     394        }
     395      }
     396    }
     397
     398      return wrongConfig;
     399  };
     400#endif
     401
     402
     403Void SEIInterLayerConstrainedTileSets::setupFromCfgFile(const Char* cfgFile)
     404{
     405  // Set default values
     406  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     407
     408  // TBD: Add default values for which layers, POCS, Tids or Nalu types the SEI should be send.
     409  defAppLayerIds    .empty( );
     410  defAppPocs        .push_back( 0 );
     411  defAppTids        .empty( );
     412  defAppVclNaluTypes.empty( );
     413
     414  Int      defSeiNaluId                  = 0;
     415  Int      defPositionInSeiNalu          = 0;
     416  Bool     defModifyByEncoder            = false;
     417
     418  // Setup config file options
     419  po::Options opts;
     420  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     421
     422  const Int maxNumTileInSet = 100;
     423
     424  opts.addOptions()
     425    ("IlAllTilesExactSampleValueMatchFlag", m_ilAllTilesExactSampleValueMatchFlag, false                    , "IlAllTilesExactSampleValueMatchFlag")
     426    ("IlOneTilePerTileSetFlag"        , m_ilOneTilePerTileSetFlag          , false                          , "IlOneTilePerTileSetFlag"          )
     427    ("IlNumSetsInMessageMinus1"       , m_ilNumSetsInMessageMinus1         , 0                              , "IlNumSetsInMessageMinus1"         )
     428    ("SkippedTileSetPresentFlag"      , m_skippedTileSetPresentFlag        , false                          , "SkippedTileSetPresentFlag"        )
     429    ("IlctsId"                        , m_ilctsId                          , IntAry1d (256,0)               , "IlctsId"                          )
     430    ("IlNumTileRectsInSetMinus1"      , m_ilNumTileRectsInSetMinus1        , IntAry1d (256,0)               , "IlNumTileRectsInSetMinus1"        )
     431    ("IlTopLeftTileIndex_%d"          , m_ilTopLeftTileIndex               , IntAry1d (maxNumTileInSet,0), 256, "IlTopLeftTileIndex"               )
     432    ("IlBottomRightTileIndex_%d"      , m_ilBottomRightTileIndex           , IntAry1d (maxNumTileInSet,0), 256, "IlBottomRightTileIndex"           )
     433    ("IlcIdc"                         , m_ilcIdc                           , IntAry1d (256,0)               , "IlcIdc"                           )
     434    ("IlExactSampleValueMatchFlag"    , m_ilExactSampleValueMatchFlag      , BoolAry1d(256,0)               , "IlExactSampleValueMatchFlag"      )
     435    ("AllTilesIlcIdc"                 , m_allTilesIlcIdc                   , 0                              , "AllTilesIlcIdc"                   )
     436    ;
     437
     438  po::setDefaults(opts);
     439
     440  // Parse the cfg file
     441  po::ErrorReporter err;
     442  po::parseConfigFile( opts, cfgFile, err );
     443};
     444
     445Bool SEIInterLayerConstrainedTileSets::checkCfg( const TComSlice* slice )
     446{
     447  // Check config values
     448  Bool wrongConfig = false;
     449  const TComPPS* pps = slice->getPPS();
     450
     451  // Currently only the active PPS checked.
     452  xCheckCfg     ( wrongConfig, pps->getTilesEnabledFlag() , "The inter-layer constrained tile sets SEI message shall not be present for the layer with nuh_layer_id equal to targetLayerId when tiles_enabled_flag is equal to 0 for any PPS that is active for the pictures of the CLVS of the layer with nuh_layer_id equal to targetLayerId." );
     453
     454  if ( m_ilOneTilePerTileSetFlag )
     455  {
     456    xCheckCfg( wrongConfig, ( pps->getNumTileColumnsMinus1() + 1 ) *  ( pps->getNumTileRowsMinus1() + 1 ) <= 256, "It is a requirement of bitstream conformance that when il_one_tile_per_tile_set_flag is equal to 1, the value of ( num_tile_columns_minus1 + 1 ) * ( num_tile_rows_minus1 + 1 ) shall be less than or equal to 256."    );
     457  }
     458  Int numSignificantSets = m_ilNumSetsInMessageMinus1 - m_skippedTileSetPresentFlag + 1;
     459
     460  for (Int i = 0 ; i < numSignificantSets; i++)
     461  {
     462    xCheckCfgRange( wrongConfig, m_ilctsId[i]                         , 0 , (1 << 30) - 1, "ilcts_id"                         );
     463  }
     464
     465  return wrongConfig;
     466};
     467#if NH_MV_SEI_TBD
     468
     469Void SEIBspNesting::setupFromSlice  ( const TComSlice* slice )
     470{
     471  sei.m_seiOlsIdx =  TBD ;
     472  sei.m_seiPartitioningSchemeIdx =  TBD ;
     473  sei.m_bspIdx =  TBD ;
     474  while( !ByteaLigned(() ) );
     475  {
     476    sei.m_bspNestingZeroBit =  TBD ;
     477  }
     478  sei.m_numSeisInBspMinus1 =  TBD ;
     479  for( Int i = 0; i  <=  NumSeisInBspMinus1( ); i++ )
     480  {
     481    SeiMessage(() );
     482  }
     483};
     484
     485Void SEIBspNesting::setupFromCfgFile(const Char* cfgFile)
     486{
     487  // Set default values
     488  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     489
     490  // TBD: Add default values for which layers, POCS, Tids or Nalu types the SEI should be send.
     491  defAppLayerIds    .push_back( TBD );
     492  defAppPocs        .push_back( TBD );
     493  defAppTids        .push_back( TBD );
     494  defAppVclNaluTypes.push_back( TBD );
     495
     496  Int      defSeiNaluId                  = 0;
     497  Int      defPositionInSeiNalu          = 0;
     498  Bool     defModifyByEncoder            = TBD;
     499
     500  // Setup config file options
     501  po::Options opts;
     502  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     503
     504  opts.addOptions()
     505    ("SeiOlsIdx"                      , m_seiOlsIdx                        , 0                              , "SeiOlsIdx"                        )
     506    ("SeiPartitioningSchemeIdx"       , m_seiPartitioningSchemeIdx         , 0                              , "SeiPartitioningSchemeIdx"         )
     507    ("BspIdx"                         , m_bspIdx                           , 0                              , "BspIdx"                           )
     508    ("BspNestingZeroBit"              , m_bspNestingZeroBit                , 0                              , "BspNestingZeroBit"                )
     509    ("NumSeisInBspMinus1"             , m_numSeisInBspMinus1               , 0                              , "NumSeisInBspMinus1"               )
     510    ;
     511
     512  po::setDefaults(opts);
     513
     514  // Parse the cfg file
     515  po::ErrorReporter err;
     516  po::parseConfigFile( opts, cfgFile, err );
     517};
     518
     519Bool SEIBspNesting::checkCfg( const TComSlice* slice )
     520{
     521  // Check config values
     522  Bool wrongConfig = false;
     523
     524  // TBD: Add constraints on presence of SEI here.
     525  xCheckCfg     ( wrongConfig, TBD , "TBD" );
     526  xCheckCfg     ( wrongConfig, TBD , "TBD" );
     527
     528  // TBD: Modify constraints according to the SEI semantics.
     529  xCheckCfgRange( wrongConfig, m_seiOlsIdx                      , MINVAL , MAXVAL, "sei_ols_idx"          );
     530  xCheckCfgRange( wrongConfig, m_seiPartitioningSchemeIdx       , MINVAL , MAXVAL, "sei_partitioning_scheme_idx"       );
     531  xCheckCfgRange( wrongConfig, m_bspIdx                         , MINVAL , MAXVAL, "bsp_idx"              );
     532  xCheckCfgRange( wrongConfig, m_bspNestingZeroBit              , MINVAL , MAXVAL, "bsp_nesting_zero_bit ");
     533  xCheckCfgRange( wrongConfig, m_numSeisInBspMinus1             , MINVAL , MAXVAL, "num_seis_in_bsp_minus1"           );
     534
     535  return wrongConfig;
     536
     537};
     538
     539Void SEIBspInitialArrivalTime::setupFromSlice  ( const TComSlice* slice )
     540{
     541  psIdx = SeiPartitioningSchemeIdx();
     542  if( nalInitialArrivalDelayPresent )
     543  {
     544    for( Int i = 0; i < BspSchedCnt( SeiOlsIdx(), psIdx, MaxTemporalId( 0 ) ); i++ )
     545    {
     546      sei.m_nalInitialArrivalDelay[i] =  TBD ;
     547    }
     548  }
     549  if( vclInitialArrivalDelayPresent )
     550  {
     551    for( Int i = 0; i < BspSchedCnt( SeiOlsIdx(), psIdx, MaxTemporalId( 0 ) ); i++ )
     552    {
     553      sei.m_vclInitialArrivalDelay[i] =  TBD ;
     554    }
     555  }
     556};
     557
     558Void SEIBspInitialArrivalTime::setupFromCfgFile(const Char* cfgFile)
     559{
     560  // Set default values
     561  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     562
     563  // TBD: Add default values for which layers, POCS, Tids or Nalu types the SEI should be send.
     564  defAppLayerIds    .push_back( TBD );
     565  defAppPocs        .push_back( TBD );
     566  defAppTids        .push_back( TBD );
     567  defAppVclNaluTypes.push_back( TBD );
     568
     569  Int      defSeiNaluId                  = 0;
     570  Int      defPositionInSeiNalu          = 0;
     571  Bool     defModifyByEncoder            = TBD;
     572
     573  // Setup config file options
     574  po::Options opts;
     575  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     576
     577  opts.addOptions()
     578    ("NalInitialArrivalDelay"         , m_nalInitialArrivalDelay           , IntAry1d (1,0)                 , "NalInitialArrivalDelay"           )
     579    ("VclInitialArrivalDelay"         , m_vclInitialArrivalDelay           , IntAry1d (1,0)                 , "VclInitialArrivalDelay"           )
     580    ;
     581
     582  po::setDefaults(opts);
     583
     584  // Parse the cfg file
     585  po::ErrorReporter err;
     586  po::parseConfigFile( opts, cfgFile, err );
     587};
     588
     589Bool SEIBspInitialArrivalTime::checkCfg( const TComSlice* slice )
     590{
     591  // Check config values
     592  Bool wrongConfig = false;
     593
     594  // TBD: Add constraints on presence of SEI here.
     595  xCheckCfg     ( wrongConfig, TBD , "TBD" );
     596  xCheckCfg     ( wrongConfig, TBD , "TBD" );
     597
     598  // TBD: Modify constraints according to the SEI semantics.
     599  xCheckCfgRange( wrongConfig, m_nalInitialArrivalDelay[i]      , MINVAL , MAXVAL, "nal_initial_arrival_delay"        );
     600  xCheckCfgRange( wrongConfig, m_vclInitialArrivalDelay[i]      , MINVAL , MAXVAL, "vcl_initial_arrival_delay"        );
     601
     602  return wrongConfig;
     603
     604};
     605#endif
     606
     607Void SEISubBitstreamProperty::setupFromCfgFile(const Char* cfgFile)
     608{
     609  // Set default values
     610  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     611
     612  // TBD: Add default values for which layers, POCS, Tids or Nalu types the SEI should be send.
     613  defAppLayerIds    .push_back( 0 );
     614  defAppPocs        .push_back( 0 );
     615  defAppTids        .push_back( 0 );
     616  defAppVclNaluTypes = IRAP_NAL_UNIT_TYPES;
     617
     618  Int      defSeiNaluId                  = 0;
     619  Int      defPositionInSeiNalu          = 0;
     620  Bool     defModifyByEncoder            = false;
     621
     622  // Setup config file options
     623  po::Options opts;
     624  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     625
     626  opts.addOptions()
     627    ("SbPropertyActiveVpsId"          , m_sbPropertyActiveVpsId            , 0                              , "SbPropertyActiveVpsId"            )
     628    ("NumAdditionalSubStreamsMinus1"  , m_numAdditionalSubStreamsMinus1    , 0                              , "NumAdditionalSubStreamsMinus1"    )
     629    ("SubBitstreamMode"               , m_subBitstreamMode                 , IntAry1d (1,0)                 , "SubBitstreamMode"                 )
     630    ("OlsIdxToVps"                    , m_olsIdxToVps                      , IntAry1d (1,0)                 , "OlsIdxToVps"                      )
     631    ("HighestSublayerId"              , m_highestSublayerId                , IntAry1d (1,0)                 , "HighestSublayerId"                )
     632    ("AvgSbPropertyBitRate"           , m_avgSbPropertyBitRate             , IntAry1d (1,0)                 , "AvgSbPropertyBitRate"             )
     633    ("MaxSbPropertyBitRate"           , m_maxSbPropertyBitRate             , IntAry1d (1,0)                 , "MaxSbPropertyBitRate"             )
     634    ;
     635
     636  po::setDefaults(opts);
     637
     638  // Parse the cfg file
     639  po::ErrorReporter err;
     640  po::parseConfigFile( opts, cfgFile, err );
     641};
     642
     643Bool SEISubBitstreamProperty::checkCfg( const TComSlice* slice )
     644{
     645  // Check config values
     646  Bool wrongConfig = false;
     647
     648  // For the current encoder, the initial IRAP access unit has always POC zero.
     649  xCheckCfg     ( wrongConfig, slice->isIRAP() && (slice->getPOC() == 0), "When present, the sub-bitstream property SEI message shall be associated with an initial IRAP access unit and the information provided by the SEI messages applies to the bitstream corresponding to the CVS containing the associated initial IRAP access unit.");
     650
     651  Bool sizeNotCorrect =
     652    (    ( m_numAdditionalSubStreamsMinus1 + 1 ) != m_subBitstreamMode    .size() )
     653    || ( ( m_numAdditionalSubStreamsMinus1 + 1 ) != m_olsIdxToVps         .size() )
     654    || ( ( m_numAdditionalSubStreamsMinus1 + 1 ) != m_highestSublayerId   .size() )
     655    || ( ( m_numAdditionalSubStreamsMinus1 + 1 ) != m_avgSbPropertyBitRate.size() )
     656    || ( ( m_numAdditionalSubStreamsMinus1 + 1 ) != m_maxSbPropertyBitRate.size() );
     657
     658  xCheckCfg( wrongConfig, !sizeNotCorrect, "Some parameters of some sub-bitstream not provided." );
     659  xCheckCfg( wrongConfig, slice->getVPS()->getVPSId() == m_sbPropertyActiveVpsId, "The value of sb_property_active_vps_id shall be equal to the value of vps_video_parameter_set_id of the active VPS referred to by the VCL NAL units of the associated access unit." );
     660
     661  xCheckCfgRange( wrongConfig, m_numAdditionalSubStreamsMinus1  , 0 , (1 << 10) - 1 , "num_additional_sub_streams_minus1");
     662
     663  if ( !sizeNotCorrect )
     664  {
     665    for (Int i = 0; i <= m_numAdditionalSubStreamsMinus1; i++ )
     666    {
     667      xCheckCfgRange( wrongConfig, m_subBitstreamMode[i]    , 0 , 1                                          , "sub_bitstream_mode" );
     668      xCheckCfgRange( wrongConfig, m_olsIdxToVps[i]         , 0 , slice->getVPS()->getNumOutputLayerSets()-1 , "ols_idx_to_vps"     );
     669    }
     670  }
     671  return wrongConfig;
     672};
     673
     674Void SEISubBitstreamProperty::resizeArrays( )
     675{
     676  m_subBitstreamMode    .resize( m_numAdditionalSubStreamsMinus1 + 1);
     677  m_olsIdxToVps         .resize( m_numAdditionalSubStreamsMinus1 + 1);
     678  m_highestSublayerId   .resize( m_numAdditionalSubStreamsMinus1 + 1);
     679  m_avgSbPropertyBitRate.resize( m_numAdditionalSubStreamsMinus1 + 1);
     680  m_maxSbPropertyBitRate.resize( m_numAdditionalSubStreamsMinus1 + 1);
     681}
     682
     683Void SEIAlphaChannelInfo::setupFromCfgFile(const Char* cfgFile)
     684{
     685  // Set default values
     686  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     687
     688  // TBD: Add default values for which layers, POCS, Tids or Nalu types the SEI should be send.
     689  defAppLayerIds    .clear();
     690  defAppPocs        .push_back( 0 );
     691  defAppTids        .push_back( 0 );
     692  defAppVclNaluTypes = IDR_NAL_UNIT_TYPES;
     693
     694  Int      defSeiNaluId                  = 0;
     695  Int      defPositionInSeiNalu          = 0;
     696  Bool     defModifyByEncoder            = false;
     697
     698  // Setup config file options
     699  po::Options opts;
     700  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     701
     702  opts.addOptions()
     703    ("AlphaChannelCancelFlag"         , m_alphaChannelCancelFlag           , false                          , "AlphaChannelCancelFlag"           )
     704    ("AlphaChannelUseIdc"             , m_alphaChannelUseIdc               , 0                              , "AlphaChannelUseIdc"               )
     705    ("AlphaChannelBitDepthMinus8"     , m_alphaChannelBitDepthMinus8       , 0                              , "AlphaChannelBitDepthMinus8"       )
     706    ("AlphaTransparentValue"          , m_alphaTransparentValue            , 0                              , "AlphaTransparentValue"            )
     707    ("AlphaOpaqueValue"               , m_alphaOpaqueValue                 , 255                            , "AlphaOpaqueValue"                 )
     708    ("AlphaChannelIncrFlag"           , m_alphaChannelIncrFlag             , false                          , "AlphaChannelIncrFlag"             )
     709    ("AlphaChannelClipFlag"           , m_alphaChannelClipFlag             , false                          , "AlphaChannelClipFlag"             )
     710    ("AlphaChannelClipTypeFlag"       , m_alphaChannelClipTypeFlag         , false                          , "AlphaChannelClipTypeFlag"         )
     711    ;
     712
     713  po::setDefaults(opts);
     714
     715  // Parse the cfg file
     716  po::ErrorReporter err;
     717  po::parseConfigFile( opts, cfgFile, err );
     718
     719};
     720
     721Bool SEIAlphaChannelInfo::checkCfg( const TComSlice* slice )
     722{
     723  // Check config values
     724  Bool wrongConfig = false;
     725
     726  int maxInterpretationValue = (1 << (m_alphaChannelBitDepthMinus8+9)) - 1;
     727  xCheckCfgRange( wrongConfig, m_alphaChannelCancelFlag         , 0 , 1, "alpha_channel_cancel_flag"        );
     728  xCheckCfgRange( wrongConfig, m_alphaChannelUseIdc             , 0 , 7, "alpha_channel_use_idc");
     729  xCheckCfgRange( wrongConfig, m_alphaChannelBitDepthMinus8     , 0 , 7, "alpha_channel_bit_depth_minus8"   );
     730  xCheckCfgRange( wrongConfig, m_alphaTransparentValue          , 0 , maxInterpretationValue, "alpha_transparent_value"          );
     731  xCheckCfgRange( wrongConfig, m_alphaOpaqueValue               , 0 , maxInterpretationValue, "alpha_opaque_value"   );
     732  xCheckCfgRange( wrongConfig, m_alphaChannelIncrFlag           , 0 , 1, "alpha_channel_incr_flag"          );
     733  xCheckCfgRange( wrongConfig, m_alphaChannelClipFlag           , 0 , 1, "alpha_channel_clip_flag"          );
     734  xCheckCfgRange( wrongConfig, m_alphaChannelClipTypeFlag       , 0 , 1, "alpha_channel_clip_type_flag"     );
     735
     736  return wrongConfig;
     737
     738};
     739
     740SEIOverlayInfo::SEIOverlayInfo ( )
     741  : m_numOverlaysMax(16)
     742  , m_numOverlayElementsMax(256)
     743  , m_numStringBytesMax(256) //incl. null termination byte
     744{ };
     745
     746Void SEIOverlayInfo::setupFromCfgFile(const Char* cfgFile)
     747{
     748  // Set default values
     749  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     750
     751  // Add default values for which layers, POCS, Tids or Nalu types the SEI should be send.
     752  defAppLayerIds    .clear();
     753  defAppPocs        .push_back( 0 );
     754  defAppTids        .push_back( 0 );
     755  defAppVclNaluTypes = IDR_NAL_UNIT_TYPES;
     756
     757  Int      defSeiNaluId                  = 0;
     758  Int      defPositionInSeiNalu          = 0;
     759  Bool     defModifyByEncoder            = false;
     760
     761  // Setup config file options
     762  po::Options opts;
     763  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     764
     765  opts.addOptions()
     766    ("OverlayInfoCancelFlag"          , m_overlayInfoCancelFlag            , false                           , "OverlayInfoCancelFlag"            )
     767    ("OverlayContentAuxIdMinus128"    , m_overlayContentAuxIdMinus128      , 0                               , "OverlayContentAuxIdMinus128"      )
     768    ("OverlayLabelAuxIdMinus128"      , m_overlayLabelAuxIdMinus128        , 0                               , "OverlayLabelAuxIdMinus128"        )
     769    ("OverlayAlphaAuxIdMinus128"      , m_overlayAlphaAuxIdMinus128        , 0                               , "OverlayAlphaAuxIdMinus128"        )
     770    ("OverlayElementLabelValueLengthMinus8", m_overlayElementLabelValueLengthMinus8, 0                       , "OverlayElementLabelValueLengthMinus8")
     771    ("NumOverlaysMinus1"              , m_numOverlaysMinus1                , 0                               , "NumOverlaysMinus1"                )
     772    ("OverlayIdx"                     , m_overlayIdx                       , IntAry1d (16,0)                 , "OverlayIdx"                       )
     773    ("LanguageOverlayPresentFlag"     , m_languageOverlayPresentFlag       , BoolAry1d(16,0)                 , "LanguageOverlayPresentFlag"       )
     774    ("OverlayContentLayerId"          , m_overlayContentLayerId            , IntAry1d (16,0)                 , "OverlayContentLayerId"            )
     775    ("OverlayLabelPresentFlag"        , m_overlayLabelPresentFlag          , BoolAry1d(16,0)                 , "OverlayLabelPresentFlag"          )
     776    ("OverlayLabelLayerId"            , m_overlayLabelLayerId              , IntAry1d (16,0)                 , "OverlayLabelLayerId"              )
     777    ("OverlayAlphaPresentFlag"        , m_overlayAlphaPresentFlag          , BoolAry1d(16,0)                 , "OverlayAlphaPresentFlag"          )
     778    ("OverlayAlphaLayerId"            , m_overlayAlphaLayerId              , IntAry1d (16,0)                 , "OverlayAlphaLayerId"              )
     779    ("NumOverlayElementsMinus1"       , m_numOverlayElementsMinus1         , IntAry1d (16,0)                 , "NumOverlayElementsMinus1"         )
     780    ("OverlayElementLabelMin_%d"      , m_overlayElementLabelMin           , IntAry1d (256,0) ,16            , "OverlayElementLabelMin"           )
     781    ("OverlayElementLabelMax_%d"      , m_overlayElementLabelMax           , IntAry1d (256,0) ,16            , "OverlayElementLabelMax"           )
     782    ("OverlayLanguage_%d"             , m_overlayLanguage                  , std::string(""), 16             , "OverlayLanguage"                  )
     783    ("OverlayName_%d"                 , m_overlayName                      , std::string(""), 16             , "OverlayName"                      )
     784    ("OverlayElementName_%d_%d"       , m_overlayElementName               , std::string(""), 256 ,16        , "OverlayElementName"               )
     785    ("OverlayInfoPersistenceFlag"     , m_overlayInfoPersistenceFlag       , false                           , "OverlayInfoPersistenceFlag"       )
     786    ;
     787
     788  po::setDefaults(opts);
     789
     790  // Parse the cfg file
     791  po::ErrorReporter err;
     792  po::parseConfigFile( opts, cfgFile, err );
     793};
     794
     795
     796Bool SEIOverlayInfo::checkCfg( const TComSlice* slice )
     797{
     798  // Check config values
     799  Bool wrongConfig = false;
     800
     801  xCheckCfgRange( wrongConfig, m_overlayInfoCancelFlag          , 0 ,   1, "overlay_info_cancel_flag"         );
     802  xCheckCfgRange( wrongConfig, m_overlayContentAuxIdMinus128    , 0 ,  31, "overlay_content_aux_id_minus128"  );
     803  xCheckCfgRange( wrongConfig, m_overlayLabelAuxIdMinus128      , 0 ,  31, "overlay_label_aux_id_minus128"    );
     804  xCheckCfgRange( wrongConfig, m_overlayAlphaAuxIdMinus128      , 0 ,  31, "overlay_alpha_aux_id_minus128"    );
     805  xCheckCfgRange( wrongConfig, m_numOverlaysMinus1              , 0 ,  m_numOverlaysMax-1, "num_overlays_minus1"  );
     806  for (Int i=0 ; i<=m_numOverlaysMinus1 ; ++i)
     807  {
     808    xCheckCfgRange( wrongConfig, m_overlayIdx[i]                  , 0 , 255, "overlay_idx"          );
     809    xCheckCfgRange( wrongConfig, m_languageOverlayPresentFlag[i]  , 0 ,   1, "language_overlay_present_flag"    );
     810    xCheckCfgRange( wrongConfig, m_overlayLabelPresentFlag[i]     , 0 ,   1, "overlay_label_present_flag"       );
     811    xCheckCfgRange( wrongConfig, m_overlayAlphaPresentFlag[i]     , 0 ,   1, "overlay_alpha_present_flag"       );
     812    xCheckCfgRange( wrongConfig, m_overlayContentLayerId[i]       , 0 ,   63, "overlay_content_layer_id"    );
     813    xCheckCfgRange( wrongConfig, m_overlayLabelLayerId[i]         , 0 ,   63, "overlay_label_layer_id"    );
     814    xCheckCfgRange( wrongConfig, m_overlayAlphaLayerId[i]         , 0 ,   63, "overlay_alpha_layer_id"    );
     815    xCheckCfgRange( wrongConfig, m_numOverlayElementsMinus1[i]    , 0 , m_numOverlayElementsMax-1, "num_overlay_elements_minus1"       );
     816    for (Int j=0 ; j<=m_numOverlayElementsMinus1[i] ; ++j)
     817    {
     818      Int maxLabelMinMaxValue = ( 1 << ( m_overlayElementLabelValueLengthMinus8 + 8 ) )-1;
     819      xCheckCfgRange( wrongConfig, m_overlayElementLabelMin[i][j] , 0 , maxLabelMinMaxValue , "overlay_element_label_min"    );
     820      xCheckCfgRange( wrongConfig, m_overlayElementLabelMax[i][j] , 0 , maxLabelMinMaxValue , "overlay_element_label_max"    );
     821    }
     822  }
     823  xCheckCfgRange( wrongConfig, m_overlayInfoPersistenceFlag     , 0 ,   1, "overlay_info_persistence_flag"    );
     824
     825  return wrongConfig;
     826
     827};
     828
     829
     830Void SEITemporalMvPredictionConstraints::setupFromCfgFile(const Char* cfgFile)
     831{
     832  // Set default values
     833  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     834
     835  // TBD: Add default values for which layers, POCS, Tids or Nalu types the SEI should be send.
     836  defAppLayerIds    .clear    (   );
     837  defAppPocs        .push_back( 0 );
     838  defAppTids        .push_back( 0 );
     839  defAppVclNaluTypes.clear    (   );
     840
     841  Int      defSeiNaluId                  = 0;
     842  Int      defPositionInSeiNalu          = 0;
     843  Bool     defModifyByEncoder            = false;
     844
     845  // Setup config file options
     846  po::Options opts;
     847  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     848
     849  opts.addOptions()
     850    ("PrevPicsNotUsedFlag"   , m_prevPicsNotUsedFlag   , false, "PrevPicsNotUsedFlag"    )
     851    ("NoIntraLayerColPicFlag", m_noIntraLayerColPicFlag, false, "NoIntraLayerColPicFlag" )
     852    ;
     853
     854  po::setDefaults(opts);
     855
     856  // Parse the cfg file
     857  po::ErrorReporter err;
     858  po::parseConfigFile( opts, cfgFile, err );
     859};
     860
     861Bool SEITemporalMvPredictionConstraints::checkCfg( const TComSlice* slice )
     862{
     863  // Check config values
     864  Bool wrongConfig = false;
     865
     866  xCheckCfg     ( wrongConfig, slice->getTemporalId() == 0 , "The temporal motion vector prediction constraints SEI message may be present in an access unit with TemporalId equal to 0 and shall not be present in an access unit with TemporalId greater than 0." );
     867
     868  return wrongConfig;
     869};
     870
     871#if NH_MV_SEI_TBD
     872Void SEIFrameFieldInfo::setupFromCfgFile(const Char* cfgFile)
     873{
     874  // Set default values
     875  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     876
     877  // TBD: Add default values for which layers, POCS, Tids or Nalu types the SEI should be send.
     878  defAppLayerIds    .push_back( TBD );
     879  defAppPocs        .push_back( TBD );
     880  defAppTids        .push_back( TBD );
     881  defAppVclNaluTypes.push_back( TBD );
     882
     883  Int      defSeiNaluId                  = 0;
     884  Int      defPositionInSeiNalu          = 0;
     885  Bool     defModifyByEncoder            = false;
     886
     887  // Setup config file options
     888  po::Options opts;
     889  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     890
     891  opts.addOptions()
     892    ("FfinfoPicStruct"     , m_ffinfoPicStruct     , 0     , "FfinfoPicStruct"     )
     893    ("FfinfoSourceScanType", m_ffinfoSourceScanType, 0     , "FfinfoSourceScanType")
     894    ("FfinfoDuplicateFlag" , m_ffinfoDuplicateFlag , false , "FfinfoDuplicateFlag" )
     895    ;
     896
     897  po::setDefaults(opts);
     898
     899  // Parse the cfg file
     900  po::ErrorReporter err;
     901  po::parseConfigFile( opts, cfgFile, err );
     902};
     903
     904
     905Bool SEIFrameFieldInfo::checkCfg( const TComSlice* slice )
     906{
     907  // Check config values
     908  Bool wrongConfig = false;
     909
     910  // TBD: Add constraints on presence of SEI here.
     911  xCheckCfg     ( wrongConfig, TBD , "TBD" );
     912  xCheckCfg     ( wrongConfig, TBD , "TBD" );
     913
     914  // TBD: Modify constraints according to the SEI semantics.
     915  xCheckCfgRange( wrongConfig, m_ffinfoPicStruct                , MINVAL , MAXVAL, "ffinfo_pic_struct"                );
     916  xCheckCfgRange( wrongConfig, m_ffinfoSourceScanType           , MINVAL , MAXVAL, "ffinfo_source_scan_type"          );
     917  xCheckCfgRange( wrongConfig, m_ffinfoDuplicateFlag            , MINVAL , MAXVAL, "ffinfo_duplicate_flag"            );
     918
     919  return wrongConfig;
     920
     921};
     922#endif
     923
     924Void SEIThreeDimensionalReferenceDisplaysInfo::setupFromCfgFile(const Char* cfgFile)
     925{
     926  // Set default values
     927  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     928
     929  // Default values for which layers, POCS, Tids or Nalu types the SEI should be sent.
     930  defAppLayerIds      .push_back( 0 );
     931  defAppPocs          .push_back( 0 );
     932  defAppTids          .push_back( 0 );
     933  defAppVclNaluTypes = IRAP_NAL_UNIT_TYPES;
     934
     935  Int      defSeiNaluId                  = 0;
     936  Int      defPositionInSeiNalu          = 0;
     937  Bool     defModifyByEncoder            = 0;
     938
     939  // Setup config file options
     940  po::Options opts;
     941  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     942
     943  opts.addOptions()
     944    ("PrecRefDisplayWidth"            , m_precRefDisplayWidth              , 0                              , "PrecRefDisplayWidth"              )
     945    ("RefViewingDistanceFlag"         , m_refViewingDistanceFlag           , false                          , "RefViewingDistanceFlag"           )
     946    ("PrecRefViewingDist"             , m_precRefViewingDist               , 0                              , "PrecRefViewingDist"               )
     947    ("NumRefDisplaysMinus1"           , m_numRefDisplaysMinus1             , 0                              , "NumRefDisplaysMinus1"             )
     948    ("LeftViewId"                     , m_leftViewId                       , IntAry1d (1,0)                 , "LeftViewId"                       )
     949    ("RightViewId"                    , m_rightViewId                      , IntAry1d (1,0)                 , "RightViewId"                      )
     950    ("ExponentRefDisplayWidth"        , m_exponentRefDisplayWidth          , IntAry1d (1,0)                 , "ExponentRefDisplayWidth"          )
     951    ("MantissaRefDisplayWidth"        , m_mantissaRefDisplayWidth          , IntAry1d (1,0)                 , "MantissaRefDisplayWidth"          )
     952    ("ExponentRefViewingDistance"     , m_exponentRefViewingDistance       , IntAry1d (1,0)                 , "ExponentRefViewingDistance"       )
     953    ("MantissaRefViewingDistance"     , m_mantissaRefViewingDistance       , IntAry1d (1,0)                 , "MantissaRefViewingDistance"       )
     954    ("AdditionalShiftPresentFlag"     , m_additionalShiftPresentFlag       , BoolAry1d(1,0)                 , "AdditionalShiftPresentFlag"       )
     955    ("NumSampleShiftPlus512"          , m_numSampleShiftPlus512            , IntAry1d (1,0)                 , "NumSampleShiftPlus512"            )
     956    ("ThreeDimensionalReferenceDisplaysExtensionFlag", m_threeDimensionalReferenceDisplaysExtensionFlag, false                          , "ThreeDimensionalReferenceDisplaysExtensionFlag")
     957    ;
     958
     959  po::setDefaults(opts);
     960
     961  // Parse the cfg file
     962  po::ErrorReporter err;
     963  po::parseConfigFile( opts, cfgFile, err );
     964};
     965
     966
     967UInt SEIThreeDimensionalReferenceDisplaysInfo::getMantissaReferenceDisplayWidthLen( Int i ) const
     968{
     969  return xGetSyntaxElementLen( m_exponentRefDisplayWidth[i], m_precRefDisplayWidth, m_mantissaRefDisplayWidth[ i ] );
     970}
     971
     972UInt SEIThreeDimensionalReferenceDisplaysInfo::getMantissaReferenceViewingDistanceLen( Int i ) const
     973{
     974  return xGetSyntaxElementLen( m_exponentRefViewingDistance[i], m_precRefViewingDist, m_mantissaRefViewingDistance[ i ] );
     975}
     976
     977UInt SEIThreeDimensionalReferenceDisplaysInfo::xGetSyntaxElementLen( Int expo, Int prec, Int val ) const
     978{
     979  UInt len;
     980  if( expo == 0 )
     981  {
     982    len = std::max(0, prec - 30 );
     983  }
     984  else
     985  {
     986    len = std::max( 0, expo + prec - 31 );
     987  }
     988
     989  assert( val >= 0 );
     990  assert( val <= ( ( 1 << len )- 1) );
     991  return len;
     992}
     993
     994Bool SEIThreeDimensionalReferenceDisplaysInfo::checkCfg( const TComSlice* slice )
     995{
     996  // Check config values
     997  Bool wrongConfig = false;
     998
     999  // The 3D reference display SEI should preferably be sent along with the multiview acquisition SEI. For now the multiview acquisition SEI is restricted to POC = 0, so 3D reference displays SEI is restricted to POC = 0 as well.
     1000  xCheckCfg     ( wrongConfig, slice->isIRAP() && (slice->getPOC() == 0)  , "The 3D reference displays SEI message currently is associated with an access unit that contains an IRAP picture." );
     1001
     1002  xCheckCfgRange( wrongConfig, m_precRefDisplayWidth            , 0 , 31, "prec_ref_display_width"  );
     1003  xCheckCfgRange( wrongConfig, m_refViewingDistanceFlag         , 0 , 1, "ref_viewing_distance_flag");
     1004  xCheckCfgRange( wrongConfig, m_precRefViewingDist             , 0 , 31, "prec_ref_viewing_dist"   );
     1005  xCheckCfgRange( wrongConfig, m_numRefDisplaysMinus1           , 0 , 31, "num_ref_displays_minus1" );
     1006
     1007  for (Int i = 0; i <= getNumRefDisplaysMinus1(); i++ )
     1008  {
     1009    xCheckCfgRange( wrongConfig, m_exponentRefDisplayWidth[i]     , 0 , 62, "exponent_ref_display_width"   );
     1010    xCheckCfgRange( wrongConfig, m_exponentRefViewingDistance[i]  , 0 , 62, "exponent_ref_viewing_distance");
     1011    xCheckCfgRange( wrongConfig, m_additionalShiftPresentFlag[i]  , 0 , 1, "additional_shift_present_flag" );
     1012    xCheckCfgRange( wrongConfig, m_numSampleShiftPlus512[i]       , 0 , 1023, "num_sample_shift_plus512"   );
     1013  }
     1014  xCheckCfgRange( wrongConfig, m_threeDimensionalReferenceDisplaysExtensionFlag, 0 , 1, "three_dimensional_reference_displays_extension_flag");
     1015
     1016  return wrongConfig;
     1017
     1018};
     1019
     1020#if SEI_DRI_F0169
     1021Void SEIDepthRepresentationInfo::setupFromSlice  ( const TComSlice* slice )
     1022{
     1023
     1024    m_currLayerID=slice->getLayerIdInVps();
     1025};
     1026
     1027Void SEIDepthRepresentationInfo::setupFromCfgFile(const Char* cfgFile)
     1028{
     1029  // Set default values
     1030  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     1031
     1032  // TBD: Add default values for which layers, POCS, Tids or Nalu types the SEI should be send.
     1033  //defAppLayerIds    .push_back( TBD );
     1034  defAppPocs        .push_back( 0 );
     1035  //defAppTids        .push_back( TBD );
     1036  //defAppVclNaluTypes.push_back( TBD );
     1037
     1038  Int      defSeiNaluId                  = 0;
     1039  Int      defPositionInSeiNalu          = 0;
     1040  Bool     defModifyByEncoder            = true;
     1041
     1042  // Setup config file options
     1043  po::Options opts;
     1044
     1045  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     1046
     1047  opts.addOptions()
     1048    ("ZNear_%d"                      , m_zNear               , std::vector<double>(0,0)       , MAX_NUM_LAYERS , "ZNear"           )
     1049    ("ZFar_%d"                       , m_zFar                , std::vector<double>(0,0)       , MAX_NUM_LAYERS , "ZFar"            )
     1050    ("DMin_%d"                       , m_dMin                , std::vector<double>(0,0)       , MAX_NUM_LAYERS , "DMin"            )
     1051    ("DMax_%d"                       , m_dMax                , std::vector<double>(0,0)       , MAX_NUM_LAYERS , "DMax"            )
     1052    ("DepthRepresentationInfoSeiPresentFlag_%d",  m_depthRepresentationInfoSeiPresentFlag, BoolAry1d(1,0), MAX_NUM_LAYERS, "DepthRepresentationInfoSeiPresentFlag")
     1053    ("DepthRepresentationType_%d"        , m_depthRepresentationType          , IntAry1d(0,0), MAX_NUM_LAYERS,  "DepthRepresentationType"        )
     1054    ("DisparityRefViewId_%d"             , m_disparityRefViewId               ,  IntAry1d(0,0), MAX_NUM_LAYERS,  "DisparityRefViewId"             )
     1055    ("DepthNonlinearRepresentationNumMinus1_%d", m_depthNonlinearRepresentationNumMinus1, IntAry1d(0,0), MAX_NUM_LAYERS, "DepthNonlinearRepresentationNumMinus1")
     1056    ("DepthNonlinearRepresentationModel_%d"    , m_depth_nonlinear_representation_model ,   IntAry1d(0,0), MAX_NUM_LAYERS, "DepthNonlinearRepresentationModel") ;
     1057
     1058
     1059  po::setDefaults(opts);
     1060
     1061  // Parse the cfg file
     1062  po::ErrorReporter err;
     1063  po::parseConfigFile( opts, cfgFile, err );
     1064
     1065
     1066  for(int i=0;i<MAX_NUM_LAYERS;i++)
     1067  {
     1068    if (m_zNear[i].size()>0)
     1069    {
     1070      m_zNearFlag.push_back(true);
     1071    }
     1072    else
     1073    {
     1074      m_zNearFlag.push_back(false);
     1075    }
     1076
     1077    if (m_zFar[i].size()>0)
     1078    {
     1079      m_zFarFlag.push_back(true);
     1080    }
     1081    else
     1082    {
     1083      m_zFarFlag.push_back(false);
     1084    }
     1085
     1086    if (m_dMin[i].size()>0)
     1087    {
     1088      m_dMinFlag.push_back(true);
     1089    }
     1090    else
     1091    {
     1092      m_dMinFlag.push_back(false);
     1093    }
     1094
     1095    if (m_dMax[i].size()>0)
     1096    {
     1097      m_dMaxFlag.push_back(true);
     1098    }
     1099    else
     1100    {
     1101      m_dMaxFlag.push_back(false);
     1102    }
     1103
     1104
     1105    if (m_depthRepresentationInfoSeiPresentFlag[i][0])
     1106    {
     1107      if ( m_depthRepresentationType[i].size()<=0 )
     1108      {
     1109        printf("DepthRepresentationType_%d must be present for layer %d\n",i,i );
     1110        return;
     1111      }
     1112
     1113      if (  m_depthRepresentationType[i][0]<0 )
     1114      {
     1115        printf("DepthRepresentationType_%d must be equal to or greater than 0\n",i );
     1116        return;
     1117      }
     1118
     1119      if (m_dMinFlag[i] || m_dMaxFlag[i])
     1120      {
     1121        if (m_disparityRefViewId[i].size()<=0)
     1122        {
     1123          printf("DisparityRefViewId_%d must be present for layer %d\n",i,i );
     1124          assert(false);
     1125          return;
     1126        }
     1127        if (m_disparityRefViewId[i][0]<0)
     1128        {
     1129          printf("DisparityRefViewId_%d must be equal to or greater than 0\n",i );
     1130          assert(false);
     1131          return;
     1132        }
     1133      }
     1134
     1135      if (m_depthRepresentationType[i][0]==3)
     1136      {
     1137        if (m_depthNonlinearRepresentationNumMinus1[i].size()<=0)
     1138        {
     1139          printf("DepthNonlinearRepresentationNumMinus1_%d must be present for layer %d\n",i,i );
     1140          assert(false);
     1141          return;
     1142        }
     1143        if (m_depthNonlinearRepresentationNumMinus1[i][0]<0)
     1144        {
     1145          printf("DepthNonlinearRepresentationNumMinus1_%d must be equal to or greater than 0\n",i );
     1146          assert(false);
     1147          return;
     1148        }
     1149
     1150        if (m_depth_nonlinear_representation_model[i].size() != m_depthNonlinearRepresentationNumMinus1[i][0]+1)
     1151        {
     1152          printf("the number of values in Depth_nonlinear_representation_model must be equal to DepthNonlinearRepresentationNumMinus1+1 in layer %d\n",i );
     1153          assert(false);
     1154          return;
     1155        }
     1156      }
     1157    }
     1158  }
     1159
     1160  assert(m_zNearFlag.size()==MAX_NUM_LAYERS);
     1161  assert(m_zFarFlag.size()==MAX_NUM_LAYERS);
     1162  assert(m_dMinFlag.size()==MAX_NUM_LAYERS);
     1163  assert(m_dMaxFlag.size()==MAX_NUM_LAYERS);
     1164}
     1165
     1166Bool SEIDepthRepresentationInfo::checkCfg( const TComSlice* slice )
     1167{
     1168    // Check config values
     1169    Bool wrongConfig = false;
     1170    assert(m_currLayerID>=0);
     1171
     1172    if (m_depthRepresentationInfoSeiPresentFlag[m_currLayerID][0]==false)
     1173    {
     1174        printf("DepthRepresentationInfoSeiPresentFlag_%d should be equal to 1 when  ApplicableLayerIds is empty or ApplicableLayerIds contains  %d\n",m_currLayerID,slice->getLayerId());
     1175        assert(false);
     1176    }
     1177    // TBD: Add constraints on presence of SEI here.
     1178    xCheckCfg     ( wrongConfig, m_depthRepresentationType[m_currLayerID][0] >=0 , "depth_representation_type must be equal to or greater than 0" );
     1179    if ( m_dMaxFlag[m_currLayerID] || m_dMinFlag[m_currLayerID])
     1180    {
     1181        xCheckCfg( wrongConfig , m_disparityRefViewId[m_currLayerID][0]>=0, "disparity_ref_view_id must be equal to or greater than 0 when d_min or d_max are present");
     1182    }
     1183
     1184    if (m_depthRepresentationType[m_currLayerID][0]==3)
     1185    {
     1186        xCheckCfg(wrongConfig , m_depthNonlinearRepresentationNumMinus1[m_currLayerID][0]>=0, "depth_nonlinear_representation_num_minus1 must be greater than or equal to 0");
     1187
     1188        if (m_depthNonlinearRepresentationNumMinus1[m_currLayerID][0]>=0)
     1189        {
     1190            xCheckCfg( wrongConfig , m_depthNonlinearRepresentationNumMinus1[m_currLayerID][0]+1 == m_depth_nonlinear_representation_model[m_currLayerID].size() ,"the number of values in depth_nonlinear_representation_model must be equal to depth_nonlinear_representation_num_minus1+1");
     1191        }
     1192
     1193    }
     1194
     1195    return wrongConfig;
     1196}
     1197#endif
     1198
     1199Void SEIMultiviewSceneInfo::setupFromCfgFile(const Char* cfgFile)
     1200{
     1201  // Set default values
     1202  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     1203
     1204  // TBD: Add default values for which layers, POCS, Tids or Nalu types the SEI should be send.
     1205  defAppLayerIds      .clear();
     1206  defAppPocs          .clear();
     1207  defAppTids          .push_back( 0 );
     1208  defAppVclNaluTypes = IRAP_NAL_UNIT_TYPES;
     1209
     1210  Int      defSeiNaluId                  = 0;
     1211  Int      defPositionInSeiNalu          = 0;
     1212  Bool     defModifyByEncoder            = false;
     1213
     1214  // Setup config file options
     1215  po::Options opts;
     1216  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     1217
     1218  opts.addOptions()
     1219    ("MinDisparity"                   , m_minDisparity                     , 0                              , "MinDisparity"                     )
     1220    ("MaxDisparityRange"              , m_maxDisparityRange                , 0                              , "MaxDisparityRange"                )
     1221    ;
     1222
     1223  po::setDefaults(opts);
     1224
     1225  // Parse the cfg file
     1226  po::ErrorReporter err;
     1227  po::parseConfigFile( opts, cfgFile, err );
     1228};
     1229
     1230
     1231Bool SEIMultiviewSceneInfo::checkCfg( const TComSlice* slice )
     1232{
     1233  // Check config values
     1234  Bool wrongConfig = false;
     1235
     1236  xCheckCfg     ( wrongConfig, slice->isIRAP(), "When present, the multiview scene information SEI message shall be associated with an IRAP access unit." );
     1237
     1238  xCheckCfgRange( wrongConfig, m_minDisparity              , -1024 , 1023, "min_disparity"                    );
     1239  xCheckCfgRange( wrongConfig, m_maxDisparityRange         ,     0 , 2047, "max_disparity_range"              );
     1240
     1241  return wrongConfig;
     1242
     1243};
     1244
     1245Void SEIMultiviewAcquisitionInfo::setupFromCfgFile(const Char* cfgFile)
     1246{
     1247  // Set default values
     1248  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     1249
     1250  defAppLayerIds    .clear();
     1251  defAppPocs        .push_back( 0 );
     1252  defAppTids        .push_back( 0 );
     1253  defAppVclNaluTypes = IDR_NAL_UNIT_TYPES;
     1254
     1255
     1256  Int      defSeiNaluId                  = 0;
     1257  Int      defPositionInSeiNalu          = 0;
     1258  Bool     defModifyByEncoder            = false;
     1259
     1260  // Setup config file options
     1261  po::Options opts;
     1262  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     1263
     1264  opts.addOptions()
     1265    ("IntrinsicParamFlag"               , m_intrinsicParamFlag               , false                              , "IntrinsicParamFlag"               )
     1266    ("ExtrinsicParamFlag"               , m_extrinsicParamFlag               , false                              , "ExtrinsicParamFlag"               )
     1267    ("IntrinsicParamsEqualFlag"         , m_intrinsicParamsEqualFlag         , false                              , "IntrinsicParamsEqualFlag"         )
     1268    ("PrecFocalLength"                  , m_precFocalLength                  , 0                                  , "PrecFocalLength"                  )
     1269    ("PrecPrincipalPoint"               , m_precPrincipalPoint               , 0                                  , "PrecPrincipalPoint"               )
     1270    ("PrecSkewFactor"                   , m_precSkewFactor                   , 0                                  , "PrecSkewFactor"                   )
     1271    ("SignFocalLengthX"                 , m_signFocalLengthX                 , BoolAry1d(1,0)                     , "SignFocalLengthX"                 )
     1272    ("ExponentFocalLengthX"             , m_exponentFocalLengthX             , IntAry1d (1,0)                     , "ExponentFocalLengthX"             )
     1273    ("MantissaFocalLengthX"             , m_mantissaFocalLengthX             , IntAry1d (1,0)                     , "MantissaFocalLengthX"             )
     1274    ("SignFocalLengthY"                 , m_signFocalLengthY                 , BoolAry1d(1,0)                     , "SignFocalLengthY"                 )
     1275    ("ExponentFocalLengthY"             , m_exponentFocalLengthY             , IntAry1d (1,0)                     , "ExponentFocalLengthY"             )
     1276    ("MantissaFocalLengthY"             , m_mantissaFocalLengthY             , IntAry1d (1,0)                     , "MantissaFocalLengthY"             )
     1277    ("SignPrincipalPointX"              , m_signPrincipalPointX              , BoolAry1d(1,0)                     , "SignPrincipalPointX"              )
     1278    ("ExponentPrincipalPointX"          , m_exponentPrincipalPointX          , IntAry1d (1,0)                     , "ExponentPrincipalPointX"          )
     1279    ("MantissaPrincipalPointX"          , m_mantissaPrincipalPointX          , IntAry1d (1,0)                     , "MantissaPrincipalPointX"          )
     1280    ("SignPrincipalPointY"              , m_signPrincipalPointY              , BoolAry1d(1,0)                     , "SignPrincipalPointY"              )
     1281    ("ExponentPrincipalPointY"          , m_exponentPrincipalPointY          , IntAry1d (1,0)                     , "ExponentPrincipalPointY"          )
     1282    ("MantissaPrincipalPointY"          , m_mantissaPrincipalPointY          , IntAry1d (1,0)                     , "MantissaPrincipalPointY"          )
     1283    ("SignSkewFactor"                   , m_signSkewFactor                   , BoolAry1d(1,0)                     , "SignSkewFactor"                   )
     1284    ("ExponentSkewFactor"               , m_exponentSkewFactor               , IntAry1d (1,0)                     , "ExponentSkewFactor"               )
     1285    ("MantissaSkewFactor"               , m_mantissaSkewFactor               , IntAry1d (1,0)                     , "MantissaSkewFactor"               )
     1286    ("PrecRotationParam"                , m_precRotationParam                , 0                                  , "PrecRotationParam"                )
     1287    ("PrecTranslationParam"             , m_precTranslationParam             , 0                                  , "PrecTranslationParam"             )
     1288    ("SignR_%d_%d"                      , m_signR                            , BoolAry1d(3,0) ,MAX_NUM_LAYERS ,3  , "SignR"                            )
     1289    ("ExponentR_%d_%d"                  , m_exponentR                        , IntAry1d (3,0) ,MAX_NUM_LAYERS ,3  , "ExponentR"                        )
     1290    ("MantissaR_%d_%d"                  , m_mantissaR                        , IntAry1d (3,0) ,MAX_NUM_LAYERS ,3  , "MantissaR"                        )
     1291    ("SignT_%d"                         , m_signT                            , BoolAry1d(3,0) ,MAX_NUM_LAYERS     , "SignT"                            )
     1292    ("ExponentT_%d"                     , m_exponentT                        , IntAry1d (3,0) ,MAX_NUM_LAYERS     , "ExponentT"                        )
     1293    ("MantissaT_%d"                     , m_mantissaT                        , IntAry1d (3,0) ,MAX_NUM_LAYERS     , "MantissaT"                        )
     1294    ;
     1295
     1296  po::setDefaults(opts);
     1297
     1298  // Parse the cfg file
     1299  po::ErrorReporter err;
     1300  po::parseConfigFile( opts, cfgFile, err );
     1301};
     1302
     1303UInt SEIMultiviewAcquisitionInfo::getMantissaFocalLengthXLen( Int i ) const
     1304{
     1305  return xGetSyntaxElementLen( m_exponentFocalLengthX[i], m_precFocalLength, m_mantissaFocalLengthX[ i ] );
     1306}
     1307
     1308Bool SEIMultiviewAcquisitionInfo::checkCfg( const TComSlice* slice )
     1309{
     1310  // Check config values
     1311  Bool wrongConfig = false;
     1312
     1313  // Currently the encoder starts with POC 0 for all layers. The condition on POC 0 should be changed, when this changes.
     1314  xCheckCfg     ( wrongConfig, slice->isIRAP() && (slice->getPOC() == 0)  , "When present, the multiview acquisition information SEI message that applies to the current layer shall be included in an access unit that contains an IRAP picture that is the first picture of a CLVS of the current layer." );
     1315
     1316  xCheckCfgRange( wrongConfig, m_precFocalLength         , 0, 31, "prec_focal_length"         );
     1317  xCheckCfgRange( wrongConfig, m_precPrincipalPoint      , 0, 31, "prec_principle_point"      );
     1318  xCheckCfgRange( wrongConfig, m_precSkewFactor          , 0, 31, "prec_skew_factor"          );
     1319
     1320  for (Int i = 0; i <= getNumViewsMinus1(); i++ )
     1321  {
     1322    xCheckCfgRange( wrongConfig, m_exponentFocalLengthX    [ i ], 0, 62, "exponent_focal_length_x"   );
     1323    xCheckCfgRange( wrongConfig, m_exponentFocalLengthY    [ i ], 0, 62, "exponent_focal_length_y"   );
     1324    xCheckCfgRange( wrongConfig, m_exponentPrincipalPointX [ i ], 0, 62, "exponent_principal_point_x");
     1325    xCheckCfgRange( wrongConfig, m_exponentPrincipalPointY [ i ], 0, 62, "exponent_principal_point_y");
     1326    xCheckCfgRange( wrongConfig, m_exponentSkewFactor      [ i ], 0, 62, "exponent_skew_factor"      );
     1327  }
     1328
     1329  xCheckCfgRange( wrongConfig, m_precRotationParam       , 0, 31, "prec_focal_length"         );
     1330  xCheckCfgRange( wrongConfig, m_precTranslationParam    , 0, 31, "prec_focal_length"         );
     1331
     1332  for (Int i = 0; i <= getNumViewsMinus1(); i++ )
     1333  {
     1334    for (Int j = 0; j <= 2; j++)
     1335    {
     1336      xCheckCfgRange( wrongConfig, m_exponentT[i][j]     , 0, 62, "exponent_skew_factor"      );
     1337      for (Int k = 0; k <= 2; k++ )
     1338      {
     1339        xCheckCfgRange( wrongConfig, m_exponentR[i][j][k], 0, 62, "exponent_principal_point_y");
     1340      }
     1341    }
     1342  }
     1343
     1344  return wrongConfig;
     1345
     1346};
     1347
     1348UInt SEIMultiviewAcquisitionInfo::getMantissaFocalLengthYLen( Int i ) const
     1349{
     1350  return xGetSyntaxElementLen( m_exponentFocalLengthY[i], m_precFocalLength, m_mantissaFocalLengthY[ i ]  );
     1351}
     1352
     1353
     1354UInt SEIMultiviewAcquisitionInfo::getMantissaPrincipalPointXLen( Int i ) const
     1355{
     1356  return xGetSyntaxElementLen( m_exponentPrincipalPointX[i], m_precPrincipalPoint, m_mantissaPrincipalPointX[ i ]  );
     1357}
     1358
     1359UInt SEIMultiviewAcquisitionInfo::getMantissaPrincipalPointYLen( Int i ) const
     1360{
     1361  return xGetSyntaxElementLen( m_exponentPrincipalPointY[i], m_precPrincipalPoint, m_mantissaPrincipalPointY[ i ] );
     1362}
     1363
     1364UInt SEIMultiviewAcquisitionInfo::getMantissaSkewFactorLen( Int i ) const
     1365{
     1366  return xGetSyntaxElementLen( m_exponentSkewFactor[ i ], m_precSkewFactor, m_mantissaSkewFactor[ i ] );
     1367}
     1368
     1369UInt SEIMultiviewAcquisitionInfo::getMantissaRLen( Int i, Int j, Int k ) const
     1370{
     1371  return xGetSyntaxElementLen( m_exponentR[ i ][ j ][ k ], m_precRotationParam, m_mantissaR[ i ][ j] [ k ] );
     1372}
     1373
     1374UInt SEIMultiviewAcquisitionInfo::getMantissaTLen( Int i, Int j ) const
     1375{
     1376  return xGetSyntaxElementLen( m_exponentT[ i ][ j ], m_precTranslationParam, m_mantissaT[ i ][ j ] );
     1377}
     1378UInt SEIMultiviewAcquisitionInfo::xGetSyntaxElementLen( Int expo, Int prec, Int val ) const
     1379{
     1380  UInt len;
     1381  if( expo == 0 )
     1382  {
     1383    len = std::max(0, prec - 30 );
     1384  }
     1385  else
     1386  {
     1387    len = std::max( 0, expo + prec - 31 );
     1388  }
     1389
     1390  assert( val >= 0 );
     1391  assert( val <= ( ( 1 << len )- 1) );
     1392  return len;
     1393}
     1394
     1395Void SEIMultiviewViewPosition::setupFromSlice  ( const TComSlice* slice )
     1396{
     1397  const TComVPS* vps = slice->getVPS();
     1398  m_numViewsMinus1 = vps->getNumViews() - 1;
     1399  m_viewPosition.resize( m_numViewsMinus1 + 1 );
     1400  for (Int i = 0; i <= m_numViewsMinus1; i++ )
     1401  {
     1402    // Assuming that view ids indicate the position
     1403    m_viewPosition[i] = vps->getViewIdVal( i );
     1404  }
     1405}
     1406
     1407Void SEIMultiviewViewPosition::setupFromCfgFile(const Char* cfgFile)
     1408{
     1409  // Set default values
     1410  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     1411
     1412  defAppLayerIds    .push_back( 0 );
     1413  defAppPocs        .push_back( 0 );
     1414  defAppTids        .push_back( 0 );
     1415  defAppVclNaluTypes = IDR_NAL_UNIT_TYPES;
     1416
     1417  Int      defSeiNaluId                  = 0;
     1418  Int      defPositionInSeiNalu          = 0;
     1419  Bool     defModifyByEncoder            = true;
     1420
     1421  // Setup config file options
     1422  po::Options opts;
     1423  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     1424
     1425  opts.addOptions()
     1426    ("NumViewsMinus1"         , m_numViewsMinus1                          , 0                       , "NumViewsMinus1")
     1427    ("ViewPosition"           , m_viewPosition                            , IntAry1d (1,0)          , "ViewPosition"  );
     1428  ;
     1429
     1430  po::setDefaults(opts);
     1431
     1432  // Parse the cfg file
     1433  po::ErrorReporter err;
     1434  po::parseConfigFile( opts, cfgFile, err );
     1435};
     1436
     1437Bool SEIMultiviewViewPosition::checkCfg( const TComSlice* slice )
     1438{
     1439  // Check config values
     1440  Bool wrongConfig = false;
     1441
     1442  // TBD: Add constraints on presence of SEI here.
     1443  xCheckCfg     ( wrongConfig, slice->isIRAP() , "When present, the multiview view position SEI message shall be associated with an IRAP access unit."  );
     1444
     1445  // TBD: Modify constraints according to the SEI semantics.
     1446  xCheckCfgRange( wrongConfig, m_numViewsMinus1                 , 0 , 62, "num_views_minus1");
     1447  for(Int i = 0; i <= m_numViewsMinus1; i++)
     1448  {
     1449    xCheckCfgRange( wrongConfig, m_viewPosition[i]                , 0 , 62, "view_position");
     1450  }
     1451
     1452  return wrongConfig;
     1453
     1454};
     1455
     1456
     1457#if NH_3D
     1458Void SEIAlternativeDepthInfo::setupFromCfgFile(const Char* cfgFile)
     1459{
     1460  // Set default values
     1461  IntAry1d defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes;
     1462
     1463  defAppLayerIds    .clear();
     1464  defAppPocs        .clear();
     1465  defAppTids        .clear();
     1466  defAppVclNaluTypes.clear();
     1467
     1468  Int      defSeiNaluId                  = 0;
     1469  Int      defPositionInSeiNalu          = 0;
     1470  Bool     defModifyByEncoder            = false;
     1471
     1472  // Setup config file options
     1473  po::Options opts;
     1474  xAddGeneralOpts( opts , defAppLayerIds, defAppPocs, defAppTids, defAppVclNaluTypes, defSeiNaluId, defPositionInSeiNalu, defModifyByEncoder );
     1475
     1476  opts.addOptions()
     1477    ("AlternativeDepthInfoCancelFlag" , m_alternativeDepthInfoCancelFlag  , false               , "AlternativeDepthInfoCancelFlag"  )
     1478    ("DepthType"                      , m_depthType                       , 1                   , "DepthType"                       )
     1479    ("NumConstituentViewsGvdMinus1"   , m_numConstituentViewsGvdMinus1    , 1                   , "NumConstituentViewsGvdMinus1"    )
     1480    ("DepthPresentGvdFlag"            , m_depthPresentGvdFlag             , false               , "DepthPresentGvdFlag"             )
     1481    ("ZGvdFlag"                       , m_zGvdFlag                        , false               , "ZGvdFlag"                        )
     1482    ("IntrinsicParamGvdFlag"          , m_intrinsicParamGvdFlag           , false               , "IntrinsicParamGvdFlag"           )
     1483    ("RotationGvdFlag"                , m_rotationGvdFlag                 , false               , "RotationGvdFlag"                 )
     1484    ("TranslationGvdFlag"             , m_translationGvdFlag              , false               , "TranslationGvdFlag"              )
     1485    ("SignGvdZNearFlag_%d"            , m_signGvdZNearFlag                , BoolAry1d(3,0), 3   , "SignGvdZNearFlag"                )
     1486    ("ExpGvdZNear_%d"                 , m_expGvdZNear                     , IntAry1d (3,0), 3   , "ExpGvdZNear"                     )
     1487    ("ManLenGvdZNearMinus1_%d"        , m_manLenGvdZNearMinus1            , IntAry1d (3,0), 3   , "ManLenGvdZNearMinus1"            )
     1488    ("ManGvdZNear_%d"                 , m_manGvdZNear                     , IntAry1d (3,0), 3   , "ManGvdZNear"                     )
     1489    ("SignGvdZFarFlag_%d"             , m_signGvdZFarFlag                 , BoolAry1d(3,0), 3   , "SignGvdZFarFlag"                 )
     1490    ("ExpGvdZFar_%d"                  , m_expGvdZFar                      , IntAry1d (3,0), 3   , "ExpGvdZFar"                      )
     1491    ("ManLenGvdZFarMinus1_%d"         , m_manLenGvdZFarMinus1             , IntAry1d (3,0), 3   , "ManLenGvdZFarMinus1"             )
     1492    ("ManGvdZFar_%d"                  , m_manGvdZFar                      , IntAry1d (3,0), 3   , "ManGvdZFar"                      )
     1493    ("PrecGvdFocalLength"             , m_precGvdFocalLength              , 18                  , "PrecGvdFocalLength"              )
     1494    ("PrecGvdPrincipalPoint"          , m_precGvdPrincipalPoint           , 18                  , "PrecGvdPrincipalPoint"           )
     1495    ("PrecGvdRotationParam"           , m_precGvdRotationParam            , 18                  , "PrecGvdRotationParam"            )
     1496    ("PrecGvdTranslationParam"        , m_precGvdTranslationParam         , 18                  , "PrecGvdTranslationParam"         )
     1497    ("SignGvdFocalLengthX_%d"         , m_signGvdFocalLengthX             , BoolAry1d(3,0), 3   ,"SignGvdFocalLengthX"              )
     1498    ("ExpGvdFocalLengthX_%d"          , m_expGvdFocalLengthX              , IntAry1d (3,0), 3   ,"ExpGvdFocalLengthX"               )
     1499    ("ManGvdFocalLengthX_%d"          , m_manGvdFocalLengthX              , IntAry1d (3,0), 3   ,"ManGvdFocalLengthX"               )
     1500    ("SignGvdFocalLengthY_%d"         , m_signGvdFocalLengthY             , BoolAry1d(3,0), 3   ,"SignGvdFocalLengthY"              )
     1501    ("ExpGvdFocalLengthY_%d"          , m_expGvdFocalLengthY              , IntAry1d (3,0), 3   ,"ExpGvdFocalLengthY"               )
     1502    ("ManGvdFocalLengthY_%d"          , m_manGvdFocalLengthY              , IntAry1d (3,0), 3   ,"ManGvdFocalLengthY"               )
     1503    ("SignGvdPrincipalPointX_%d"      , m_signGvdPrincipalPointX          , BoolAry1d(3,0), 3   ,"SignGvdPrincipalPointX"           )
     1504    ("ExpGvdPrincipalPointX_%d"       , m_expGvdPrincipalPointX           , IntAry1d (3,0), 3   ,"ExpGvdPrincipalPointX"            )
     1505    ("ManGvdPrincipalPointX_%d"       , m_manGvdPrincipalPointX           , IntAry1d (3,0), 3   ,"ManGvdPrincipalPointX"            )
     1506    ("SignGvdPrincipalPointY_%d"      , m_signGvdPrincipalPointY          , BoolAry1d(3,0), 3   ,"SignGvdPrincipalPointY"           )
     1507    ("ExpGvdPrincipalPointY_%d"       , m_expGvdPrincipalPointY           , IntAry1d (3,0), 3   ,"ExpGvdPrincipalPointY"            )
     1508    ("ManGvdPrincipalPointY_%d"       , m_manGvdPrincipalPointY           , IntAry1d (3,0), 3   ,"ManGvdPrincipalPointY"            )
     1509    ("SignGvdR00_%d"                  , m_signGvdR00                      , BoolAry1d(3,0), 3   ,"SignGvdR00"                       )
     1510    ("ExpGvdR00_%d"                   , m_expGvdR00                       , IntAry1d (3,0), 3   ,"ExpGvdR00"                        )
     1511    ("ManGvdR00_%d"                   , m_manGvdR00                       , IntAry1d (3,0), 3   ,"ManGvdR00"                        )
     1512    ("SignGvdR01_%d"                  , m_signGvdR01                      , BoolAry1d(3,0), 3   ,"SignGvdR01"                       )
     1513    ("ExpGvdR01_%d"                   , m_expGvdR01                       , IntAry1d (3,0), 3   ,"ExpGvdR01"                        )
     1514    ("ManGvdR01_%d"                   , m_manGvdR01                       , IntAry1d (3,0), 3   ,"ManGvdR01"                        )
     1515    ("SignGvdR02_%d"                  , m_signGvdR02                      , BoolAry1d(3,0), 3   ,"SignGvdR02"                       )
     1516    ("ExpGvdR02_%d"                   , m_expGvdR02                       , IntAry1d (3,0), 3   ,"ExpGvdR02"                        )
     1517    ("ManGvdR02_%d"                   , m_manGvdR02                       , IntAry1d (3,0), 3   ,"ManGvdR02"                        )
     1518    ("SignGvdR10_%d"                  , m_signGvdR10                      , BoolAry1d(3,0), 3   ,"SignGvdR10"                       )
     1519    ("ExpGvdR10_%d"                   , m_expGvdR10                       , IntAry1d (3,0), 3   ,"ExpGvdR10"                        )
     1520    ("ManGvdR10_%d"                   , m_manGvdR10                       , IntAry1d (3,0), 3   ,"ManGvdR10"                        )
     1521    ("SignGvdR11_%d"                  , m_signGvdR11                      , BoolAry1d(3,0), 3   ,"SignGvdR11"                       )
     1522    ("ExpGvdR11_%d"                   , m_expGvdR11                       , IntAry1d (3,0), 3   ,"ExpGvdR11"                        )
     1523    ("ManGvdR11_%d"                   , m_manGvdR11                       , IntAry1d (3,0), 3   ,"ManGvdR11"                        )
     1524    ("SignGvdR12_%d"                  , m_signGvdR12                      , BoolAry1d(3,0), 3   ,"SignGvdR12"                       )
     1525    ("ExpGvdR12_%d"                   , m_expGvdR12                       , IntAry1d (3,0), 3   ,"ExpGvdR12"                        )
     1526    ("ManGvdR12_%d"                   , m_manGvdR12                       , IntAry1d (3,0), 3   ,"ManGvdR12"                        )
     1527    ("SignGvdR20_%d"                  , m_signGvdR20                      , BoolAry1d(3,0), 3   ,"SignGvdR20"                       )
     1528    ("ExpGvdR20_%d"                   , m_expGvdR20                       , IntAry1d (3,0), 3   ,"ExpGvdR20"                        )
     1529    ("ManGvdR20_%d"                   , m_manGvdR20                       , IntAry1d (3,0), 3   ,"ManGvdR20"                        )
     1530    ("SignGvdR21_%d"                  , m_signGvdR21                      , BoolAry1d(3,0), 3   ,"SignGvdR21"                       )
     1531    ("ExpGvdR21_%d"                   , m_expGvdR21                       , IntAry1d (3,0), 3   ,"ExpGvdR21"                        )
     1532    ("ManGvdR21_%d"                   , m_manGvdR21                       , IntAry1d (3,0), 3   ,"ManGvdR21"                        )
     1533    ("SignGvdR22_%d"                  , m_signGvdR22                      , BoolAry1d(3,0), 3   ,"SignGvdR22"                       )
     1534    ("ExpGvdR22_%d"                   , m_expGvdR22                       , IntAry1d (3,0), 3   ,"ExpGvdR22"                        )
     1535    ("ManGvdR22_%d"                   , m_manGvdR22                       , IntAry1d (3,0), 3   ,"ManGvdR22"                        )
     1536    ("SignGvdTX_%d"                   , m_signGvdTX                       , BoolAry1d(3,0), 3   ,"SignGvdTX"                        )
     1537    ("ExpGvdTX_%d"                    , m_expGvdTX                        , IntAry1d (3,0), 3   ,"ExpGvdTX"                         )
     1538    ("ManGvdTX_%d"                    , m_manGvdTX                        , IntAry1d (3,0), 3   ,"ManGvdTX"                         )
     1539    ("MinOffsetXInt"                  , m_minOffsetXInt                   , 0                   , "MinOffsetXInt"                   )
     1540    ("MinOffsetXFrac"                 , m_minOffsetXFrac                  , 0                   , "MinOffsetXFrac"                  )
     1541    ("MaxOffsetXInt"                  , m_maxOffsetXInt                   , 0                   , "MaxOffsetXInt"                   )
     1542    ("MaxOffsetXFrac"                 , m_maxOffsetXFrac                  , 0                   , "MaxOffsetXFrac"                  )
     1543    ("OffsetYPresentFlag"             , m_offsetYPresentFlag              , false               , "OffsetYPresentFlag"              )
     1544    ("MinOffsetYInt"                  , m_minOffsetYInt                   , 0                   , "MinOffsetYInt"                   )
     1545    ("MinOffsetYFrac"                 , m_minOffsetYFrac                  , 0                   , "MinOffsetYFrac"                  )
     1546    ("MaxOffsetYInt"                  , m_maxOffsetYInt                   , 0                   , "MaxOffsetYInt"                   )
     1547    ("MaxOffsetYFrac"                 , m_maxOffsetYFrac                  , 0                   , "MaxOffsetYFrac"                  )
     1548    ("WarpMapSizePresentFlag"         , m_warpMapSizePresentFlag          , false               , "WarpMapSizePresentFlag"          )
     1549    ("WarpMapWidthMinus2"             , m_warpMapWidthMinus2              , 0                   , "WarpMapWidthMinus2"              )
     1550    ("WarpMapHeightMinus2"            , m_warpMapHeightMinus2             , 0                   , "WarpMapHeightMinus2"             )
     1551    ;
     1552
     1553  po::setDefaults(opts);
     1554
     1555  // Parse the cfg file
     1556  po::ErrorReporter err;
     1557  po::parseConfigFile( opts, cfgFile, err );
     1558};
     1559Bool SEIAlternativeDepthInfo::checkCfg( const TComSlice* slice )
     1560{
     1561  // Check config values
     1562  Bool wrongConfig = false;
     1563
     1564
     1565  xCheckCfgRange( wrongConfig, m_alternativeDepthInfoCancelFlag , 0 , 1, "alternative_depth_info_cancel_flag");
     1566  xCheckCfgRange( wrongConfig, m_depthType                      , 0 , 1, "depth_type"                       );
     1567
     1568  xCheckCfgRange( wrongConfig, m_numConstituentViewsGvdMinus1   , 1 , 1, "num_constituent_views_gvd_minus1 "); // 1: 3 views only, cuurent.
     1569  xCheckCfgRange( wrongConfig, m_depthPresentGvdFlag            , 0 , 1, "depth_present_gvd_flag"           );
     1570  xCheckCfgRange( wrongConfig, m_zGvdFlag                       , 0 , 1, "z_gvd_flag"                       );
     1571  xCheckCfgRange( wrongConfig, m_intrinsicParamGvdFlag          , 0 , 1, "intrinsic_param_gvd_flag"         );
     1572  xCheckCfgRange( wrongConfig, m_rotationGvdFlag                , 0 , 1, "rotation_gvd_flag"                );
     1573  xCheckCfgRange( wrongConfig, m_translationGvdFlag             , 0 , 1, "translation_gvd_flag"             );
     1574
     1575  return wrongConfig;
     1576
     1577};
     1578
     1579UInt SEIAlternativeDepthInfo::getManGvdFocalLengthXLen       ( Int i, int j ) const
     1580{
     1581  UInt rval;
     1582  rval = xGetSyntaxElementLen( m_expGvdFocalLengthX[i][j], m_precGvdFocalLength, m_manGvdFocalLengthX[i][j]  );
     1583  if (rval == 0)
     1584    return m_precGvdFocalLength;
     1585  else
     1586    return rval;
     1587};
     1588
     1589UInt SEIAlternativeDepthInfo::getManGvdFocalLengthYLen       ( Int i, int j ) const
     1590{
     1591  UInt rval;
     1592  rval = xGetSyntaxElementLen( m_expGvdFocalLengthY[i][j], m_precGvdFocalLength, m_manGvdFocalLengthY[i][j]  );
     1593  if (rval == 0)
     1594    return m_precGvdFocalLength;
     1595  else
     1596    return rval;
     1597};
     1598
     1599UInt SEIAlternativeDepthInfo::getManGvdPrincipalPointXLen    ( Int i, int j ) const
     1600{
     1601  UInt rval;
     1602  rval = xGetSyntaxElementLen( m_expGvdPrincipalPointX[i][j], m_precGvdPrincipalPoint, m_manGvdPrincipalPointX[i][j]  );
     1603  if (rval == 0)
     1604    return m_precGvdPrincipalPoint;
     1605  else
     1606    return rval;
     1607};
     1608
     1609UInt SEIAlternativeDepthInfo::getManGvdPrincipalPointYLen    ( Int i, int j ) const
     1610{
     1611  UInt rval;
     1612  rval = xGetSyntaxElementLen( m_expGvdPrincipalPointY[i][j], m_precGvdPrincipalPoint, m_manGvdPrincipalPointY[i][j]  );
     1613  if (rval == 0)
     1614    return m_precGvdPrincipalPoint;
     1615  else
     1616    return rval;
     1617};
     1618
     1619UInt SEIAlternativeDepthInfo::getManGvdTXLen                 ( Int i, int j ) const
     1620{
     1621  UInt rval;
     1622  rval = xGetSyntaxElementLen( m_expGvdTX[i][j], m_precGvdTranslationParam, m_manGvdTX[i][j]  );
     1623  if (rval == 0)
     1624    return m_precGvdTranslationParam;
     1625  else
     1626    return rval;
     1627};
     1628
     1629UInt SEIAlternativeDepthInfo::xGetSyntaxElementLen( Int expo, Int prec, Int val ) const
     1630{
     1631  UInt len;
     1632  if( expo == 0 )
     1633  {
     1634    len = std::max(0, prec - 30 );
     1635  }
     1636  else
     1637  {
     1638    len = std::max( 0, expo + prec - 31 );
     1639  }
     1640
     1641  assert( val >= 0 );
     1642  assert( val <= ( ( 1 << len )- 1) );
     1643  return len;
     1644}
     1645
     1646#endif
     1647
     1648#endif
  • trunk/source/Lib/TLibCommon/SEI.h

    r1313 r1356  
    4242#include "CommonDef.h"
    4343#include "libmd5/MD5.h"
     44
     45
     46#if NH_MV_SEI
     47#include "TAppCommon/program_options_lite.h"
     48using namespace std;
     49namespace po = df::program_options_lite;
     50#endif
     51
    4452//! \ingroup TLibCommon
    4553//! \{
    4654class TComSPS;
     55#if NH_MV_SEI
     56class TComSlice;
     57class SEIScalableNesting;
     58#endif
    4759
    4860/**
     
    8496    CHROMA_SAMPLING_FILTER_HINT          = 140,
    8597    KNEE_FUNCTION_INFO                   = 141
    86 #if NH_MV
    87     ,SUB_BITSTREAM_PROPERTY              = 164
     98#if NH_MV_SEI
     99    ,COLOUR_REMAPPING_INFO                    = 142,
     100    DEINTERLACED_FIELD_IDENTIFICATION         = 143,
     101    LAYERS_NOT_PRESENT                        = 160,
     102    INTER_LAYER_CONSTRAINED_TILE_SETS         = 161,
     103    BSP_NESTING                               = 162,
     104    BSP_INITIAL_ARRIVAL_TIME                  = 163,
     105    SUB_BITSTREAM_PROPERTY                    = 164,
     106    ALPHA_CHANNEL_INFO                        = 165,
     107    OVERLAY_INFO                              = 166,
     108    TEMPORAL_MV_PREDICTION_CONSTRAINTS        = 167,
     109    FRAME_FIELD_INFO                          = 168,
     110    THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO = 176,
     111    DEPTH_REPRESENTATION_INFO                 = 177,
     112    MULTIVIEW_SCENE_INFO                      = 178,
     113    MULTIVIEW_ACQUISITION_INFO                = 179,
     114    MULTIVIEW_VIEW_POSITION                   = 180
     115#if NH_3D
     116    ,ALTERNATIVE_DEPTH_INFO                    = 181
    88117#endif
     118#endif
    89119
    90120  };
    91121
    92   SEI() {}
     122  SEI();
     123
    93124  virtual ~SEI() {}
    94 
    95   static const Char *getSEIMessageString(SEI::PayloadType payloadType);
    96 
     125  virtual SEI*       getCopy( ) const;
     126  static const Char *getSEIMessageString(SEI::PayloadType payloadType );
    97127  virtual PayloadType payloadType() const = 0;
     128
     129#if NH_MV_SEI
     130  static SEI*        getNewSEIMessage         ( SEI::PayloadType payloadType );
     131  Bool               insertSei                ( Int curLayerId, Int curPoc, Int curTid, Int curNaluType ) const;
     132
     133
     134  virtual Void       setupFromSlice           ( const TComSlice* slice );
     135  virtual Void       setupFromCfgFile         ( const Char* cfgFile );
     136  virtual Bool       checkCfg                 ( const TComSlice* slice   );
     137
     138  Void               xPrintCfgErrorIntro();
     139  Void               xCheckCfgRange           ( Bool& wrongConfig, Int val, Int minVal, Int maxVal, const Char* seName );
     140  Void               xCheckCfg                ( Bool& wrongConfig, Bool cond, const Char* errStr );
     141  Void               xAddGeneralOpts          ( po::Options &opts, IntAry1d defAppLayerIds, IntAry1d defAppPocs, IntAry1d defAppTids, IntAry1d defAppVclNaluTypes,
     142                                                Int defSeiNaluId, Int defPositionInSeiNalu, Bool defModifyByEncoder );
     143    // Filters where to insert SEI in the bitstream.
     144  // When the respected vector is empty, all layersIds, POCs, Tids, and Nalu types are used.
     145  IntAry1d                       m_applicableLayerIds;
     146  IntAry1d                       m_applicablePocs;
     147  IntAry1d                       m_applicableTids;
     148  IntAry1d                       m_applicableVclNaluTypes;
     149
     150  Int                            m_payloadType;              // Payload type
     151  Int                            m_seiNaluId;                // Identifies to which NAL unit  the SEI is added.
     152  Int                            m_positionInSeiNalu;        // Identifies the order within the NAL unit
     153  Bool                           m_modifyByEncoder;          // Don't use the SEI cfg-file, but let let the encoder setup the NALU.
     154
     155  SEIScalableNesting*            m_scalNestSeiContThisSei;   // Pointer to scalable nesting SEI containing the SEI. When NULL, the SEI is not nested.
     156#endif
    98157};
    99158
     
    155214  Bool m_noParameterSetUpdateFlag;
    156215  Int numSpsIdsMinus1;
    157   std::vector<Int> activeSeqParameterSetId; 
     216  std::vector<Int> activeSeqParameterSetId;
    158217};
    159218
     
    468527    SEIMasteringDisplayColourVolume() {}
    469528    virtual ~SEIMasteringDisplayColourVolume(){}
    470    
     529
    471530    TComSEIMasteringDisplay values;
    472531};
    473532
    474533#if NH_MV
     534#if !NH_MV_SEI
    475535class SEISubBitstreamProperty : public SEI
    476536{
     
    490550};
    491551#endif
     552#endif
    492553
    493554typedef std::list<SEI*> SEIMessages;
     
    550611
    551612    public:
    552       Int     m_mcts_id; 
     613      Int     m_mcts_id;
    553614      Bool    m_display_tile_set_flag;
    554615      Int     m_num_tile_rects_in_set; //_minus1;
     
    598659};
    599660
     661#if NH_MV_SEI
     662#if NH_MV_LAYERS_NOT_PRESENT_SEI
     663class SEILayersNotPresent : public SEI
     664{
     665public:
     666  PayloadType payloadType( ) const { return LAYERS_NOT_PRESENT; }
     667  SEILayersNotPresent ( ) { };
     668  ~SEILayersNotPresent( ) { };
     669  SEI* getCopy( ) const { return new SEILayersNotPresent(*this); };
     670
     671  Void setupFromCfgFile( const Char*      cfgFile );
     672  Bool checkCfg        ( const TComSlice* slice   );
     673
     674  Int       m_lnpSeiActiveVpsId;
     675  UInt      m_lnpSeiMaxLayers;
     676  BoolAry1d m_layerNotPresentFlag;
     677
     678  Void resizeDimI( Int sizeDimI )
     679  {
     680    m_layerNotPresentFlag.resize( sizeDimI );
     681  }
     682};
    600683#endif
    601684
     685class SEIInterLayerConstrainedTileSets : public SEI
     686{
     687public:
     688  PayloadType payloadType( ) const { return INTER_LAYER_CONSTRAINED_TILE_SETS; }
     689  SEIInterLayerConstrainedTileSets ( ) { };
     690  ~SEIInterLayerConstrainedTileSets( ) { };
     691  SEI* getCopy( ) const { return new SEIInterLayerConstrainedTileSets(*this); };
     692
     693  Void setupFromCfgFile( const Char*      cfgFile );
     694  Bool checkCfg        ( const TComSlice* slice   );
     695
     696  Bool      m_ilAllTilesExactSampleValueMatchFlag;
     697  Bool      m_ilOneTilePerTileSetFlag;
     698  Int       m_ilNumSetsInMessageMinus1;
     699  Bool      m_skippedTileSetPresentFlag;
     700  IntAry1d  m_ilctsId;
     701  IntAry1d  m_ilNumTileRectsInSetMinus1;
     702  IntAry2d  m_ilTopLeftTileIndex;
     703  IntAry2d  m_ilBottomRightTileIndex;
     704  IntAry1d  m_ilcIdc;
     705  BoolAry1d m_ilExactSampleValueMatchFlag;
     706  Int       m_allTilesIlcIdc;
     707
     708  Void      resizeDimI( Int sizeDimI )
     709  {
     710    m_ilctsId                    .resize( sizeDimI );
     711    m_ilNumTileRectsInSetMinus1  .resize( sizeDimI );
     712    m_ilTopLeftTileIndex         .resize( sizeDimI );
     713    m_ilBottomRightTileIndex     .resize( sizeDimI );
     714    m_ilcIdc                     .resize( sizeDimI );
     715    m_ilExactSampleValueMatchFlag.resize( sizeDimI );
     716  }
     717
     718  Void      resizeDimJ( Int i, Int sizeDimJ )
     719  {
     720    m_ilTopLeftTileIndex    [i].resize( sizeDimJ );
     721    m_ilBottomRightTileIndex[i].resize( sizeDimJ );
     722  }
     723
     724};
     725
     726#if NH_MV_TBD
     727class SEIBspNesting : public SEI
     728{
     729public:
     730  PayloadType payloadType( ) const { return BSP_NESTING; }
     731  SEIBspNesting ( ) { };
     732  ~SEIBspNesting( ) { };
     733  SEI* getCopy( ) const { return new SEIBspNesting(*this); };
     734
     735  Void setupFromCfgFile( const Char*      cfgFile );
     736  Void setupFromSlice  ( const TComSlice* slice   );
     737  Bool checkCfg        ( const TComSlice* slice   );
     738
     739  Int       m_seiOlsIdx;
     740  Int       m_seiPartitioningSchemeIdx;
     741  Int       m_bspIdx;
     742  Int       m_bspNestingZeroBit;
     743  Int       m_numSeisInBspMinus1;
     744};
     745
     746class SEIBspInitialArrivalTime : public SEI
     747{
     748public:
     749  PayloadType payloadType( ) const { return BSP_INITIAL_ARRIVAL_TIME; }
     750  SEIBspInitialArrivalTime ( ) { };
     751  ~SEIBspInitialArrivalTime( ) { };
     752  SEI* getCopy( ) const { return new SEIBspInitialArrivalTime(*this); };
     753
     754  Void setupFromCfgFile( const Char*      cfgFile );
     755  Void setupFromSlice  ( const TComSlice* slice   );
     756  Bool checkCfg        ( const TComSlice* slice   );
     757
     758  IntAry1d  m_nalInitialArrivalDelay;
     759  IntAry1d  m_vclInitialArrivalDelay;
     760};
     761#endif
     762
     763class SEISubBitstreamProperty : public SEI
     764{
     765public:
     766  PayloadType payloadType( ) const { return SUB_BITSTREAM_PROPERTY; }
     767  SEISubBitstreamProperty ( ) { };
     768  ~SEISubBitstreamProperty( ) { };
     769  SEI* getCopy( ) const { return new SEISubBitstreamProperty(*this); };
     770
     771  Void setupFromCfgFile( const Char*      cfgFile );
     772  Bool checkCfg        ( const TComSlice* slice   );
     773  Void resizeArrays    ( );
     774
     775  Int       m_sbPropertyActiveVpsId;
     776  Int       m_numAdditionalSubStreamsMinus1;
     777  IntAry1d  m_subBitstreamMode;
     778  IntAry1d  m_olsIdxToVps;
     779  IntAry1d  m_highestSublayerId;
     780  IntAry1d  m_avgSbPropertyBitRate;
     781  IntAry1d  m_maxSbPropertyBitRate;
     782};
     783
     784class SEIAlphaChannelInfo : public SEI
     785{
     786public:
     787  PayloadType payloadType( ) const { return ALPHA_CHANNEL_INFO; }
     788  SEIAlphaChannelInfo ( ) { };
     789  ~SEIAlphaChannelInfo( ) { };
     790  SEI* getCopy( ) const { return new SEIAlphaChannelInfo(*this); };
     791
     792  Void setupFromCfgFile( const Char*      cfgFile );
     793  Bool checkCfg        ( const TComSlice* slice   );
     794
     795  Bool      m_alphaChannelCancelFlag;
     796  Int       m_alphaChannelUseIdc;
     797  Int       m_alphaChannelBitDepthMinus8;
     798  Int       m_alphaTransparentValue;
     799  Int       m_alphaOpaqueValue;
     800  Bool      m_alphaChannelIncrFlag;
     801  Bool      m_alphaChannelClipFlag;
     802  Bool      m_alphaChannelClipTypeFlag;
     803};
     804
     805class SEIOverlayInfo : public SEI
     806{
     807public:
     808  PayloadType payloadType( ) const { return OVERLAY_INFO; }
     809  SEIOverlayInfo ( );
     810  ~SEIOverlayInfo( ) { };
     811  SEI* getCopy( ) const { return new SEIOverlayInfo(*this); };
     812
     813  Void setupFromCfgFile( const Char*      cfgFile );
     814  Bool checkCfg        ( const TComSlice* slice   );
     815
     816  const Int m_numOverlaysMax;
     817  const Int m_numOverlayElementsMax;
     818  const Int m_numStringBytesMax;  //incl. null termination byte
     819
     820  Bool      m_overlayInfoCancelFlag;
     821  Int       m_overlayContentAuxIdMinus128;
     822  Int       m_overlayLabelAuxIdMinus128;
     823  Int       m_overlayAlphaAuxIdMinus128;
     824  Int       m_overlayElementLabelValueLengthMinus8;
     825  Int       m_numOverlaysMinus1;
     826  IntAry1d  m_overlayIdx;
     827  BoolAry1d m_languageOverlayPresentFlag;
     828  IntAry1d  m_overlayContentLayerId;
     829  BoolAry1d m_overlayLabelPresentFlag;
     830  IntAry1d  m_overlayLabelLayerId;
     831  BoolAry1d m_overlayAlphaPresentFlag;
     832  IntAry1d  m_overlayAlphaLayerId;
     833  IntAry1d  m_numOverlayElementsMinus1;
     834  IntAry2d  m_overlayElementLabelMin;
     835  IntAry2d  m_overlayElementLabelMax;
     836  StringAry1d  m_overlayLanguage;
     837  StringAry1d  m_overlayName;
     838  StringAry2d  m_overlayElementName;
     839  Bool      m_overlayInfoPersistenceFlag;
     840};
     841
     842class SEITemporalMvPredictionConstraints : public SEI
     843{
     844public:
     845  PayloadType payloadType( ) const { return TEMPORAL_MV_PREDICTION_CONSTRAINTS; }
     846  SEITemporalMvPredictionConstraints ( ) { };
     847  ~SEITemporalMvPredictionConstraints( ) { };
     848  SEI* getCopy( ) const { return new SEITemporalMvPredictionConstraints(*this); };
     849
     850  Void setupFromCfgFile( const Char*      cfgFile );
     851  Bool checkCfg        ( const TComSlice* slice   );
     852
     853  Bool      m_prevPicsNotUsedFlag;
     854  Bool      m_noIntraLayerColPicFlag;
     855};
     856
     857#if NH_MV_SEI_TBD
     858class SEIFrameFieldInfo : public SEI
     859{
     860public:
     861  PayloadType payloadType( ) const { return FRAME_FIELD_INFO; }
     862  SEIFrameFieldInfo ( ) { };
     863  ~SEIFrameFieldInfo( ) { };
     864  SEI* getCopy( ) const { return new SEIFrameFieldInfo(*this); };
     865
     866  Void setupFromCfgFile( const Char*      cfgFile );
     867  Void setupFromSlice  ( const TComSlice* slice   );
     868  Bool checkCfg        ( const TComSlice* slice   );
     869
     870  Int       m_ffinfoPicStruct;
     871  Int       m_ffinfoSourceScanType;
     872  Bool      m_ffinfoDuplicateFlag;
     873};
     874#endif
     875
     876class SEIThreeDimensionalReferenceDisplaysInfo : public SEI
     877{
     878public:
     879  PayloadType payloadType( ) const { return THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO; }
     880  SEIThreeDimensionalReferenceDisplaysInfo ( ) { };
     881  ~SEIThreeDimensionalReferenceDisplaysInfo( ) { };
     882  SEI* getCopy( ) const { return new SEIThreeDimensionalReferenceDisplaysInfo(*this); };
     883
     884  Void setupFromCfgFile( const Char*      cfgFile );
     885  Bool checkCfg        ( const TComSlice* slice   );
     886
     887  Int getNumRefDisplaysMinus1( ) const
     888  {
     889    return m_numRefDisplaysMinus1;
     890  }
     891
     892  Int       m_precRefDisplayWidth;
     893  Bool      m_refViewingDistanceFlag;
     894  Int       m_precRefViewingDist;
     895  Int       m_numRefDisplaysMinus1;
     896  IntAry1d  m_leftViewId;
     897  IntAry1d  m_rightViewId;
     898  IntAry1d  m_exponentRefDisplayWidth;
     899  IntAry1d  m_mantissaRefDisplayWidth;
     900  IntAry1d  m_exponentRefViewingDistance;
     901  IntAry1d  m_mantissaRefViewingDistance;
     902  BoolAry1d m_additionalShiftPresentFlag;
     903  IntAry1d  m_numSampleShiftPlus512;
     904  Bool      m_threeDimensionalReferenceDisplaysExtensionFlag;
     905
     906  Void resizeArrays( )
     907  {
     908    Int numReferenceDiaplays = getNumRefDisplaysMinus1() + 1;
     909
     910    m_leftViewId    .resize( numReferenceDiaplays );
     911    m_rightViewId   .resize( numReferenceDiaplays );
     912    m_exponentRefDisplayWidth      .resize( numReferenceDiaplays );
     913    m_mantissaRefDisplayWidth      .resize( numReferenceDiaplays );
     914    m_exponentRefViewingDistance   .resize( numReferenceDiaplays );
     915    m_mantissaRefViewingDistance   .resize( numReferenceDiaplays );
     916    m_additionalShiftPresentFlag   .resize( numReferenceDiaplays );
     917    m_numSampleShiftPlus512        .resize( numReferenceDiaplays );
     918  }
     919
     920  UInt getMantissaReferenceDisplayWidthLen  ( Int i ) const ;
     921  UInt getMantissaReferenceViewingDistanceLen  ( Int i ) const ;
     922private:
     923  UInt xGetSyntaxElementLen( Int expo, Int prec, Int val ) const;
     924};
     925
     926#if SEI_DRI_F0169
     927class SEIDepthRepresentationInfo : public SEI
     928{
     929    public:
     930        PayloadType payloadType( ) const { return DEPTH_REPRESENTATION_INFO; }
     931        SEIDepthRepresentationInfo ( )
     932        {
     933            m_currLayerID=-1;
     934        };
     935        ~SEIDepthRepresentationInfo( ) { };
     936        SEI* getCopy( ) const { return new SEIDepthRepresentationInfo(*this); };
     937
     938        Void setupFromCfgFile( const Char*      cfgFile );
     939        Void setupFromSlice  ( const TComSlice* slice   );
     940        Bool checkCfg        ( const TComSlice* slice   );
     941        Void clear()
     942        {
     943            int i;
     944            m_zNearFlag.clear();
     945            m_zFarFlag.clear();
     946            m_dMinFlag.clear();
     947            m_dMaxFlag.clear();
     948
     949            for(i=0;i<m_zNear.size();i++)
     950                m_zNear[i].clear();
     951            m_zNear.clear();
     952
     953            for(i=0;i<m_zFar.size();i++)
     954                m_zFar[i].clear();
     955            m_zFar.clear();
     956
     957            for(i=0;i<m_dMin.size();i++)
     958                m_dMin[i].clear();
     959            m_dMin.clear();
     960
     961            for(i=0;i<m_dMax.size();i++)
     962                m_dMax[i].clear();
     963            m_dMax.clear();
     964
     965            for(i=0;i<m_depthRepresentationType.size();i++)
     966                m_depthRepresentationType[i].clear();
     967            m_depthRepresentationType.clear();
     968
     969            for(i=0;i<m_disparityRefViewId.size();i++)
     970                m_disparityRefViewId[i].clear();
     971            m_disparityRefViewId.clear();
     972
     973            for(i=0;i<m_depthNonlinearRepresentationNumMinus1.size();i++)
     974                m_depthNonlinearRepresentationNumMinus1[i].clear();
     975            m_depthNonlinearRepresentationNumMinus1.clear();
     976
     977            for(i=0;i<m_depth_nonlinear_representation_model.size();i++)
     978                m_depth_nonlinear_representation_model[i].clear();
     979            m_depth_nonlinear_representation_model.clear();
     980
     981        }
     982        Int m_currLayerID;
     983        BoolAry1d      m_zNearFlag;
     984        BoolAry1d      m_zFarFlag;
     985        BoolAry1d      m_dMinFlag;
     986        BoolAry1d      m_dMaxFlag;
     987        BoolAry2d      m_depthRepresentationInfoSeiPresentFlag;
     988        std::vector< std::vector<Double> > m_zNear,m_zFar,m_dMin,m_dMax;
     989
     990        IntAry2d       m_depthRepresentationType;
     991        IntAry2d       m_disparityRefViewId;
     992        IntAry2d       m_depthNonlinearRepresentationNumMinus1;
     993        IntAry2d       m_depth_nonlinear_representation_model;
     994};
     995#endif
     996
     997class SEIMultiviewSceneInfo : public SEI
     998{
     999public:
     1000  PayloadType payloadType( ) const { return MULTIVIEW_SCENE_INFO; }
     1001  SEIMultiviewSceneInfo ( ) { };
     1002  ~SEIMultiviewSceneInfo( ) { };
     1003  SEI* getCopy( ) const { return new SEIMultiviewSceneInfo(*this); };
     1004
     1005  Void setupFromCfgFile( const Char*      cfgFile );
     1006  Bool checkCfg        ( const TComSlice* slice   );
     1007
     1008  Int       m_minDisparity;
     1009  Int       m_maxDisparityRange;
     1010};
     1011
     1012
     1013class SEIMultiviewAcquisitionInfo : public SEI
     1014{
     1015public:
     1016  PayloadType payloadType( ) const { return MULTIVIEW_ACQUISITION_INFO; }
     1017  SEIMultiviewAcquisitionInfo ( ) { };
     1018  ~SEIMultiviewAcquisitionInfo( ) { };
     1019  SEI* getCopy( ) const { return new SEIMultiviewAcquisitionInfo(*this); };
     1020
     1021  Void setupFromCfgFile( const Char*      cfgFile );
     1022  Bool checkCfg        ( const TComSlice* slice   );
     1023
     1024  Int getNumViewsMinus1( ) const
     1025  {
     1026    Int numViewsMinus1;
     1027    if( m_scalNestSeiContThisSei != NULL )
     1028    {
     1029      numViewsMinus1 = m_scalNestSeiContThisSei->m_nestingNumLayersMinus1;
     1030    }
     1031    else
     1032    {
     1033      numViewsMinus1 = 0;
     1034    }
     1035    return numViewsMinus1;
     1036  }
     1037
     1038  Void resizeArrays( )
     1039  {
     1040    Int numViews = getNumViewsMinus1() + 1;
     1041    m_signFocalLengthX       .resize( numViews );
     1042    m_exponentFocalLengthX   .resize( numViews );
     1043    m_mantissaFocalLengthX   .resize( numViews );
     1044    m_signFocalLengthY       .resize( numViews );
     1045    m_exponentFocalLengthY   .resize( numViews );
     1046    m_mantissaFocalLengthY   .resize( numViews );
     1047    m_signPrincipalPointX    .resize( numViews );
     1048    m_exponentPrincipalPointX.resize( numViews );
     1049    m_mantissaPrincipalPointX.resize( numViews );
     1050    m_signPrincipalPointY    .resize( numViews );
     1051    m_exponentPrincipalPointY.resize( numViews );
     1052    m_mantissaPrincipalPointY.resize( numViews );
     1053    m_signSkewFactor         .resize( numViews );
     1054    m_exponentSkewFactor     .resize( numViews );
     1055    m_mantissaSkewFactor     .resize( numViews );
     1056
     1057    m_signR                  .resize( numViews );
     1058    m_exponentR              .resize( numViews );
     1059    m_mantissaR              .resize( numViews );
     1060    m_signT                  .resize( numViews );
     1061    m_exponentT              .resize( numViews );
     1062    m_mantissaT              .resize( numViews );
     1063
     1064    for( Int i = 0; i  < numViews ; i++ )
     1065    {
     1066      m_signR    [i].resize( 3 );
     1067      m_exponentR[i].resize( 3 );
     1068      m_mantissaR[i].resize( 3 );
     1069      m_signT    [i].resize( 3 );
     1070      m_exponentT[i].resize( 3 );
     1071      m_mantissaT[i].resize( 3 );
     1072
     1073      for (Int j = 0; j < 3; j++)
     1074      {
     1075        m_signR    [i][j].resize( 3 );
     1076        m_exponentR[i][j].resize( 3 );
     1077        m_mantissaR[i][j].resize( 3 );
     1078      }
     1079    }
     1080  }
     1081
     1082  UInt getMantissaFocalLengthXLen   ( Int i ) const ;
     1083  UInt getMantissaFocalLengthYLen   ( Int i ) const ;
     1084  UInt getMantissaPrincipalPointXLen( Int i ) const ;
     1085  UInt getMantissaPrincipalPointYLen( Int i ) const ;
     1086  UInt getMantissaSkewFactorLen     ( Int i ) const ;
     1087  UInt getMantissaRLen              ( Int i, Int j, Int k ) const ;
     1088  UInt getMantissaTLen              ( Int i, Int j )        const ;
     1089
     1090  Bool      m_intrinsicParamFlag;
     1091  Bool      m_extrinsicParamFlag;
     1092  Bool      m_intrinsicParamsEqualFlag;
     1093  Int       m_precFocalLength;
     1094  Int       m_precPrincipalPoint;
     1095  Int       m_precSkewFactor;
     1096  BoolAry1d m_signFocalLengthX;
     1097  IntAry1d  m_exponentFocalLengthX;
     1098  IntAry1d  m_mantissaFocalLengthX;
     1099  BoolAry1d m_signFocalLengthY;
     1100  IntAry1d  m_exponentFocalLengthY;
     1101  IntAry1d  m_mantissaFocalLengthY;
     1102  BoolAry1d m_signPrincipalPointX;
     1103  IntAry1d  m_exponentPrincipalPointX;
     1104  IntAry1d  m_mantissaPrincipalPointX;
     1105  BoolAry1d m_signPrincipalPointY;
     1106  IntAry1d  m_exponentPrincipalPointY;
     1107  IntAry1d  m_mantissaPrincipalPointY;
     1108  BoolAry1d m_signSkewFactor;
     1109  IntAry1d  m_exponentSkewFactor;
     1110  IntAry1d  m_mantissaSkewFactor;
     1111  Int       m_precRotationParam;
     1112  Int       m_precTranslationParam;
     1113  BoolAry3d m_signR;
     1114  IntAry3d  m_exponentR;
     1115  IntAry3d  m_mantissaR;
     1116  BoolAry2d m_signT;
     1117  IntAry2d  m_exponentT;
     1118  IntAry2d  m_mantissaT;
     1119private:
     1120  UInt xGetSyntaxElementLen( Int expo, Int prec, Int val ) const;
     1121};
     1122
     1123
     1124
     1125class SEIMultiviewViewPosition : public SEI
     1126{
     1127public:
     1128  PayloadType payloadType( ) const { return MULTIVIEW_VIEW_POSITION; }
     1129  SEIMultiviewViewPosition ( ) { };
     1130  ~SEIMultiviewViewPosition( ) { };
     1131  SEI* getCopy( ) const { return new SEIMultiviewViewPosition(*this); };
     1132
     1133  Void setupFromCfgFile( const Char*      cfgFile );
     1134  Void setupFromSlice  ( const TComSlice* slice   );
     1135  Bool checkCfg        ( const TComSlice* slice   );
     1136
     1137  Int       m_numViewsMinus1;
     1138  IntAry1d  m_viewPosition;
     1139};
     1140
     1141#if NH_3D
     1142class SEIAlternativeDepthInfo : public SEI
     1143{
     1144public:
     1145  PayloadType payloadType( ) const { return ALTERNATIVE_DEPTH_INFO; }
     1146  SEIAlternativeDepthInfo ( ) { };
     1147  ~SEIAlternativeDepthInfo( ) { };
     1148  SEI* getCopy( ) const { return new SEIAlternativeDepthInfo(*this); };
     1149
     1150  Void setupFromCfgFile( const Char*      cfgFile );
     1151  Bool checkCfg        ( const TComSlice* slice   );
     1152
     1153  UInt getManGvdFocalLengthXLen       ( Int i, Int j ) const;
     1154  UInt getManGvdFocalLengthYLen       ( Int i, Int j ) const;
     1155  UInt getManGvdPrincipalPointXLen    ( Int i, Int j ) const;
     1156  UInt getManGvdPrincipalPointYLen    ( Int i, Int j ) const;
     1157  //UInt getManGvdRLen                  ( Int i, int j ) const;
     1158  UInt getManGvdTXLen                 ( Int i, Int j ) const;
     1159  UInt xGetSyntaxElementLen           ( Int expo, Int prec, Int val ) const;
     1160
     1161  Void resizeArrays( )
     1162  {
     1163    const Int numViews = 3; // getNumConstituentViewsGvdMinus1() + 1;
     1164
     1165    m_signGvdZNearFlag.resize(3);
     1166    m_expGvdZNear.resize(3);
     1167    m_manLenGvdZNearMinus1.resize(3);
     1168    m_manGvdZNear.resize(3);
     1169    m_signGvdZFarFlag.resize(3);
     1170    m_expGvdZFar.resize(3);
     1171    m_manLenGvdZFarMinus1.resize(3);
     1172    m_manGvdZFar.resize(3);
     1173
     1174    m_signGvdFocalLengthX.resize(3);
     1175    m_expGvdFocalLengthX.resize(3);
     1176    m_manGvdFocalLengthX.resize(3);
     1177    m_signGvdFocalLengthY.resize(3);
     1178    m_expGvdFocalLengthY.resize(3);
     1179    m_manGvdFocalLengthY.resize(3);
     1180    m_signGvdPrincipalPointX.resize(3);
     1181    m_expGvdPrincipalPointX.resize(3);
     1182    m_manGvdPrincipalPointX.resize(3);
     1183    m_signGvdPrincipalPointY.resize(3);
     1184    m_expGvdPrincipalPointY.resize(3);
     1185    m_manGvdPrincipalPointY.resize(3);
     1186
     1187    m_signGvdR00.resize(3);
     1188    m_expGvdR00.resize(3);
     1189    m_manGvdR00.resize(3);
     1190    m_signGvdR01.resize(3);
     1191    m_expGvdR01.resize(3);
     1192    m_manGvdR01.resize(3);
     1193    m_signGvdR02.resize(3);
     1194    m_expGvdR02.resize(3);
     1195    m_manGvdR02.resize(3);
     1196    m_signGvdR10.resize(3);
     1197    m_expGvdR10.resize(3);
     1198    m_manGvdR10.resize(3);
     1199    m_signGvdR11.resize(3);
     1200    m_expGvdR11.resize(3);
     1201    m_manGvdR11.resize(3);
     1202    m_signGvdR12.resize(3);
     1203    m_expGvdR12.resize(3);
     1204    m_manGvdR12.resize(3);
     1205    m_signGvdR20.resize(3);
     1206    m_expGvdR20.resize(3);
     1207    m_manGvdR20.resize(3);
     1208    m_signGvdR21.resize(3);
     1209    m_expGvdR21.resize(3);
     1210    m_manGvdR21.resize(3);
     1211    m_signGvdR22.resize(3);
     1212    m_expGvdR22.resize(3);
     1213    m_manGvdR22.resize(3);
     1214
     1215    m_signGvdTX.resize(3);
     1216    m_expGvdTX.resize(3);
     1217    m_manGvdTX.resize(3);
     1218
     1219    for( Int i = 0; i < numViews; i++ )
     1220    {
     1221      m_signGvdZNearFlag[i].resize(3);
     1222      m_expGvdZNear[i].resize(3);
     1223      m_manLenGvdZNearMinus1[i].resize(3);
     1224      m_manGvdZNear[i].resize(3);
     1225      m_signGvdZFarFlag[i].resize(3);
     1226      m_expGvdZFar[i].resize(3);
     1227      m_manLenGvdZFarMinus1[i].resize(3);
     1228      m_manGvdZFar[i].resize(3);
     1229
     1230      m_signGvdFocalLengthX[i].resize(3);
     1231      m_expGvdFocalLengthX[i].resize(3);
     1232      m_manGvdFocalLengthX[i].resize(3);
     1233      m_signGvdFocalLengthY[i].resize(3);
     1234      m_expGvdFocalLengthY[i].resize(3);
     1235      m_manGvdFocalLengthY[i].resize(3);
     1236      m_signGvdPrincipalPointX[i].resize(3);
     1237      m_expGvdPrincipalPointX[i].resize(3);
     1238      m_manGvdPrincipalPointX[i].resize(3);
     1239      m_signGvdPrincipalPointY[i].resize(3);
     1240      m_expGvdPrincipalPointY[i].resize(3);
     1241      m_manGvdPrincipalPointY[i].resize(3);
     1242
     1243      m_signGvdR00[i].resize(3);
     1244      m_expGvdR00[i].resize(3);
     1245      m_manGvdR00[i].resize(3);
     1246      m_signGvdR01[i].resize(3);
     1247      m_expGvdR01[i].resize(3);
     1248      m_manGvdR01[i].resize(3);
     1249      m_signGvdR02[i].resize(3);
     1250      m_expGvdR02[i].resize(3);
     1251      m_manGvdR02[i].resize(3);
     1252      m_signGvdR10[i].resize(3);
     1253      m_expGvdR10[i].resize(3);
     1254      m_manGvdR10[i].resize(3);
     1255      m_signGvdR11[i].resize(3);
     1256      m_expGvdR11[i].resize(3);
     1257      m_manGvdR11[i].resize(3);
     1258      m_signGvdR12[i].resize(3);
     1259      m_expGvdR12[i].resize(3);
     1260      m_manGvdR12[i].resize(3);
     1261      m_signGvdR20[i].resize(3);
     1262      m_expGvdR20[i].resize(3);
     1263      m_manGvdR20[i].resize(3);
     1264      m_signGvdR21[i].resize(3);
     1265      m_expGvdR21[i].resize(3);
     1266      m_manGvdR21[i].resize(3);
     1267      m_signGvdR22[i].resize(3);
     1268      m_expGvdR22[i].resize(3);
     1269      m_manGvdR22[i].resize(3);
     1270
     1271      m_signGvdTX[i].resize(3);
     1272      m_expGvdTX[i].resize(3);
     1273      m_manGvdTX[i].resize(3);
     1274    }
     1275
     1276  }
     1277
     1278  Bool      m_alternativeDepthInfoCancelFlag;
     1279  Int       m_depthType;
     1280  Int       m_numConstituentViewsGvdMinus1;
     1281  Bool      m_depthPresentGvdFlag;
     1282  Bool      m_zGvdFlag;
     1283  Bool      m_intrinsicParamGvdFlag;
     1284  Bool      m_rotationGvdFlag;
     1285  Bool      m_translationGvdFlag;
     1286  BoolAry2d m_signGvdZNearFlag;
     1287  IntAry2d  m_expGvdZNear;
     1288  IntAry2d  m_manLenGvdZNearMinus1;
     1289  IntAry2d  m_manGvdZNear;
     1290  BoolAry2d m_signGvdZFarFlag;
     1291  IntAry2d  m_expGvdZFar;
     1292  IntAry2d  m_manLenGvdZFarMinus1;
     1293  IntAry2d  m_manGvdZFar;
     1294  Int       m_precGvdFocalLength;
     1295  Int       m_precGvdPrincipalPoint;
     1296  Int       m_precGvdRotationParam;
     1297  Int       m_precGvdTranslationParam;
     1298  BoolAry2d m_signGvdFocalLengthX;
     1299  IntAry2d  m_expGvdFocalLengthX;
     1300  IntAry2d  m_manGvdFocalLengthX;
     1301  BoolAry2d m_signGvdFocalLengthY;
     1302  IntAry2d  m_expGvdFocalLengthY;
     1303  IntAry2d  m_manGvdFocalLengthY;
     1304  BoolAry2d m_signGvdPrincipalPointX;
     1305  IntAry2d  m_expGvdPrincipalPointX;
     1306  IntAry2d  m_manGvdPrincipalPointX;
     1307  BoolAry2d m_signGvdPrincipalPointY;
     1308  IntAry2d  m_expGvdPrincipalPointY;
     1309  IntAry2d  m_manGvdPrincipalPointY;
     1310
     1311  BoolAry2d m_signGvdR00;
     1312  IntAry2d  m_expGvdR00;
     1313  IntAry2d  m_manGvdR00;
     1314  BoolAry2d m_signGvdR01;
     1315  IntAry2d  m_expGvdR01;
     1316  IntAry2d  m_manGvdR01;
     1317  BoolAry2d m_signGvdR02;
     1318  IntAry2d  m_expGvdR02;
     1319  IntAry2d  m_manGvdR02;
     1320  BoolAry2d m_signGvdR10;
     1321  IntAry2d  m_expGvdR10;
     1322  IntAry2d  m_manGvdR10;
     1323  BoolAry2d m_signGvdR11;
     1324  IntAry2d  m_expGvdR11;
     1325  IntAry2d  m_manGvdR11;
     1326  BoolAry2d m_signGvdR12;
     1327  IntAry2d  m_expGvdR12;
     1328  IntAry2d  m_manGvdR12;
     1329  BoolAry2d m_signGvdR20;
     1330  IntAry2d  m_expGvdR20;
     1331  IntAry2d  m_manGvdR20;
     1332  BoolAry2d m_signGvdR21;
     1333  IntAry2d  m_expGvdR21;
     1334  IntAry2d  m_manGvdR21;
     1335  BoolAry2d m_signGvdR22;
     1336  IntAry2d  m_expGvdR22;
     1337  IntAry2d  m_manGvdR22;
     1338
     1339  BoolAry2d m_signGvdTX;
     1340  IntAry2d  m_expGvdTX;
     1341  IntAry2d  m_manGvdTX;
     1342
     1343  Int       m_minOffsetXInt;
     1344  Int       m_minOffsetXFrac;
     1345  Int       m_maxOffsetXInt;
     1346  Int       m_maxOffsetXFrac;
     1347  Bool      m_offsetYPresentFlag;
     1348  Int       m_minOffsetYInt;
     1349  Int       m_minOffsetYFrac;
     1350  Int       m_maxOffsetYInt;
     1351  Int       m_maxOffsetYFrac;
     1352  Bool      m_warpMapSizePresentFlag;
     1353  Int       m_warpMapWidthMinus2;
     1354  Int       m_warpMapHeightMinus2;
     1355};
     1356
     1357#endif
     1358#endif
     1359
     1360#endif
    6021361//! \}
  • trunk/source/Lib/TLibCommon/TComDataCU.cpp

    r1321 r1356  
    54665466    }
    54675467
     5468#if NH_3D_FIX_NBDV_COL
     5469    // The picture pColCU->getSlice()->getRefPic(eColRefPicList, iColRefIdx) might not be in DPB anymore
     5470    // So don't access it directly.
     5471    iColRefViewIdx = pColCU->getSlice()->getVPS()->getViewOrderIdx( pColCU->getSlice()->getRefLayerId( eColRefPicList, iColRefIdx ) );       
     5472#else
    54685473    iColRefViewIdx = pColCU->getSlice()->getRefPic(eColRefPicList, iColRefIdx)->getViewIndex();
     5474#endif
     5475
    54695476
    54705477    if ( iColViewIdx    == iColRefViewIdx ) // temporal vector
  • trunk/source/Lib/TLibCommon/TypeDef.h

    r1321 r1356  
    4343//! \{
    4444/////////////////////////////////////////////////////////////////////////////////////////
    45 ///////////////////////////////// EXTENSION SELECTION /////////////////////////////////// 
     45///////////////////////////////// EXTENSION SELECTION ///////////////////////////////////
    4646/////////////////////////////////////////////////////////////////////////////////////////
    4747/* HEVC_EXT might be defined by compiler/makefile options.
    48    Linux makefiles support the following settings:   
    49    make             -> HEVC_EXT not defined   
     48   Linux makefiles support the following settings:
     49   make             -> HEVC_EXT not defined
    5050   make HEVC_EXT=0  -> NH_MV=0 H_3D=0   --> plain HM
    51    make HEVC_EXT=1  -> NH_MV=1 H_3D=0   --> MV only 
    52    make HEVC_EXT=2  -> NH_MV=1 H_3D=1   --> full 3D 
     51   make HEVC_EXT=1  -> NH_MV=1 H_3D=0   --> MV only
     52   make HEVC_EXT=2  -> NH_MV=1 H_3D=1   --> full 3D
    5353*/
    5454#ifndef HEVC_EXT
     
    5656#endif
    5757#if ( HEVC_EXT < 0 )||( HEVC_EXT > 2 )
    58 #error HEVC_EXT must be in the range of 0 to 2, inclusive. 
     58#error HEVC_EXT must be in the range of 0 to 2, inclusive.
    5959#endif
    6060#define NH_MV          ( HEVC_EXT != 0)
    6161#define NH_3D          ( HEVC_EXT == 2)
    6262/////////////////////////////////////////////////////////////////////////////////////////
    63 ///////////////////////////////////   FIXES           /////////////////////////////////// 
     63///////////////////////////////////   FIXES AND INTEGRATIONS     ////////////////////////
    6464/////////////////////////////////////////////////////////////////////////////////////////
    6565#if NH_MV
    66 #define NH_MV_FIX_TICKET_106                      1 // Identical motion check.
    67 #define NH_MV_FIX_NO_REF_PICS_CHECK               1 // !!SPEC!!
    68 #define NH_MV_FIX_INIT_NUM_ACTIVE_REF_LAYER_PICS  1 // Derivation of NumActiveRefLayerPIcs. !!SPEC!!
     66#define NH_MV_SEI_TBD                             0
     67#define NH_MV_SEI                                 1
     68#define NH_MV_FIX_TICKET_106                      1 // Identical motion check.
     69#define NH_MV_FIX_NO_REF_PICS_CHECK               1 // !!SPEC!!
     70#define NH_MV_FIX_INIT_NUM_ACTIVE_REF_LAYER_PICS  1 // Derivation of NumActiveRefLayerPIcs. !!SPEC!!
    6971#define NH_MV_FIX_NUM_POC_TOTAL_CUR               1 // Derivation of NumPocTotalCur for IDR pictures. !!SPEC!!
     72#define NH_MV_LAYERS_NOT_PRESENT_SEI              1 // Layers not present SEI message JCTMV-M0043
     73#if NH_MV_SEI
     74#define SEI_DRI_F0169 1
     75#endif
    7076#endif
    7177#if NH_3D
    7278#define H_3D_FIX_ARP_CHECK_NOT_IN_DPB     1
     79#define NH_3D_FIX_NBDV_COL                1
    7380#endif
    7481/////////////////////////////////////////////////////////////////////////////////////////
    75 ///////////////////////////////////   MAJOR DEFINES   /////////////////////////////////// 
     82///////////////////////////////////   MAJOR DEFINES   ///////////////////////////////////
    7683/////////////////////////////////////////////////////////////////////////////////////////
    7784#if NH_MV
     
    9097                                             // LGE_ARP_CTX_F0161                JCT3V-F0161
    9198                                             // MTK_ARP_FLAG_CABAC_SIMP_G0061 Use 2 context for ARP flag referring to only left neighbor block in JCT3V-G0061
    92                                              // MTK_ARP_REF_SELECTION_G0053 ARP Reference picture selection in JCT3V-G0053 
     99                                             // MTK_ARP_REF_SELECTION_G0053 ARP Reference picture selection in JCT3V-G0053
    93100                                             // MTK_ALIGN_SW_WD_BI_PRED_ARP_H0085  Align the SW and WD for the bi-prediction ARP PUs by disallowing non-normative fast bi-prediction for ARP PUs, JCT3V-H0085
    94                                              // QC_I0051_ARP_SIMP         
    95                                              // SHARP_ARP_CHROMA_I0104     
     101                                             // QC_I0051_ARP_SIMP
     102                                             // SHARP_ARP_CHROMA_I0104
    96103                                             // MTK_I0072_IVARP_SCALING_FIX
    97104                                             // SEC_ARP_VIEW_REF_CHECK_J0037    Signaling iv_res_pred_weight_idx when the current slice has both view and temporal reference picture(s), JCT3V-J0037 item1
    98105                                             // SEC_ARP_REM_ENC_RESTRICT_K0035    Removal of encoder restriction of ARP, JCT3V-K0035
    99106#define NH_3D_QTLPC                        1   // OL_QTLIMIT_PREDCODING_B0068 //JCT3V-B0068
    100                                               // HHI_QTLPC_RAU_OFF_C0160 JCT3V-C0160 change 2: quadtree limitation and predictive coding switched off in random access units 
     107                                              // HHI_QTLPC_RAU_OFF_C0160 JCT3V-C0160 change 2: quadtree limitation and predictive coding switched off in random access units
    101108                                              // MTK_TEX_DEP_PAR_G0055 Texture-partition-dependent depth partition. JCT3V-G0055
    102 #define NH_3D_VSO                          1   // VSO, View synthesis optimization, includes: 
     109#define NH_3D_VSO                          1   // VSO, View synthesis optimization, includes:
    103110                                              // HHI_VSO
    104111                                              // HHI_VSO_LS_TABLE_M23714 enable table base Lagrange multiplier optimization
     
    106113                                              // LGE_WVSO_A0119
    107114                                              // SCU_HS_VSD_BUGFIX_IMPROV_G0163
    108 #define NH_3D_NBDV                         1   // Neighboring block disparity derivation 
    109                                               // QC_JCT3V-A0097 
     115#define NH_3D_NBDV                         1   // Neighboring block disparity derivation
     116                                              // QC_JCT3V-A0097
    110117                                              // LGE_DVMCP_A0126
    111                                               // LGE_DVMCP_MEM_REDUCTION_B0135     
     118                                              // LGE_DVMCP_MEM_REDUCTION_B0135
    112119                                              // QC_SIMPLE_NBDV_B0047
    113120                                              // FIX_LGE_DVMCP_B0133
    114121                                              // QC_NBDV_LDB_FIX_C0055
    115122                                              // MTK_SAIT_TEMPORAL_FIRST_ORDER_C0141_C0097
    116                                               // MTK_SIMPLIFY_DVTC_C0135           
     123                                              // MTK_SIMPLIFY_DVTC_C0135
    117124                                              // QC_CU_NBDV_D0181
    118125                                              // SEC_DEFAULT_DV_D0112
     
    154161                                              // NTT_VSP_DC_BUGFIX_E0208 bugfix for sub-PU based DC in VSP, JCT3V-E0208
    155162                                              // NTT_VSP_COMMON_E0207_E0208 common part of JCT3V-E0207 and JCT3V-E0208
    156                                               // MTK_F0109_LG_F0120_VSP_BLOCK MTK_LG_SIMPLIFY_VSP_BLOCK_PARTITION_F0109_F0120 
     163                                              // MTK_F0109_LG_F0120_VSP_BLOCK MTK_LG_SIMPLIFY_VSP_BLOCK_PARTITION_F0109_F0120
    157164                                              // SHARP_VSP_BLOCK_IN_AMP_F0102 VSP partitioning for AMP
    158165                                              // MTK_VSP_SIMPLIFICATION_F0111 1. Inherited VSP also use NBDV of current CU, 2. VSP cannot be inherited from above LCU rowss
    159                                               // LGE_SHARP_VSP_INHERIT_F0104 
     166                                              // LGE_SHARP_VSP_INHERIT_F0104
    160167                                              // NTT_STORE_SPDV_VSP_G0148 Storing Sub-PU based DV for VSP
    161168                                              // Restricted bi-prediction for VSP
     
    164171#define NH_3D_MLC                          1
    165172#define NH_3D_IV_MERGE                     1  // Inter-view motion merge candidate
    166                                               // HHI_INTER_VIEW_MOTION_PRED 
     173                                              // HHI_INTER_VIEW_MOTION_PRED
    167174                                              // SAIT_IMPROV_MOTION_PRED_M24829, improved inter-view motion vector prediction
    168175                                              // QC_MRG_CANS_B0048             , JCT3V-B0048, B0086, B0069
    169176                                              // OL_DISMV_POS_B0069            , different pos for disparity MV candidate, B0069
    170177                                              // MTK_INTERVIEW_MERGE_A0049     , second part
    171                                               // QC_AMVP_MRG_UNIFY_IVCAN_C0051     
    172                                               // QC_INRIA_MTK_MRG_E0126 
     178                                              // QC_AMVP_MRG_UNIFY_IVCAN_C0051
     179                                              // QC_INRIA_MTK_MRG_E0126
    173180                                              // ETRIKHU_MERGE_REUSE_F0093 QC_DEPTH_IV_MRG_F0125, JCT3V-F0125: Depth oriented Inter-view MV candidate
    174181                                              // MTK_NBDV_IVREF_FIX_G0067      , Disable IvMC, VSP when IVREF is not available, JCT3V-G0067
     
    187194                                              // TEXTURE MERGING CANDIDATE     , JCT3V-C0137
    188195                                              // EC_MPI_ENABLING_MERGE_F0150, MPI flag in VPS and enabling in Merge mode
    189 #define NH_3D_TMVP                        1   // QC_TMVP_C0047 
     196#define NH_3D_TMVP                        1   // QC_TMVP_C0047
    190197                                              // Sony_M23639
    191198                                              // H_3D_TMVP_SCALING_FIX_K0053       1   // QC/CY for K0053
     
    207214                                              // QC_DIM_DELTADC_UNIFY_F0132 Unify delta DC coding in depth intra modes
    208215                                              // LGE_SIMP_DIM_NOT_PRESENT_FLAG_CODING_H0119_H0135  Use only one context for CABAC of dim_not_present_flag
    209                                               // QC_SIMP_DELTADC_CODING_H0131   Simplify detaDC entropy coding 
     216                                              // QC_SIMP_DELTADC_CODING_H0131   Simplify detaDC entropy coding
    210217                                              // MTK_DMM_SIMP_CODE_H0092        Remove CABAC context for DMM1 mode coding
    211218                                              // MTK_DELTA_DC_FLAG_ONE_CONTEXT_H0084_H0100_H0113 Use only one context for CABAC of delta_dc_flag as in JCTVC-H0084, JCTVC-H0100 and JCTVC-H0113
    212219                                              // HS_DMM_SIGNALLING_I0120
    213                                               // SHARP_DMM1_I0110 LUT size reduction for DMM1 proposed in JCT3V-I0110 
     220                                              // SHARP_DMM1_I0110 LUT size reduction for DMM1 proposed in JCT3V-I0110
    214221                                              // MTK_DMM_SIM_J0035
    215                                               // SHARP_DMM_CLEAN_K0042             1   // Generate DMM pattern with rotation 
     222                                              // SHARP_DMM_CLEAN_K0042             1   // Generate DMM pattern with rotation
    216223#define NH_3D_DLT                         1   // Depth Lookup Table
    217224                                              // HHI_DELTADC_DLT_D0035
    218225                                              // LGE_PRED_RES_CODING_DLT_DOMAIN_F0159 JCT3V-F0159
    219                                               // SEC_NO_RESI_DLT_H0105   
    220                                               // MTK_DLT_CODING_FIX_H0091 
     226                                              // SEC_NO_RESI_DLT_H0105
     227                                              // MTK_DLT_CODING_FIX_H0091
    221228                                              // H_3D_DELTA_DLT
    222229                                              // RWTH_DLT_CLIP_I0057
    223                                               // SHARP_DLT_SIMP_J0029 DLT(DepthValue2Idx[]) table derivation cleanup 
     230                                              // SHARP_DLT_SIMP_J0029 DLT(DepthValue2Idx[]) table derivation cleanup
    224231#define NH_3D_SDC_INTRA                   1   // Segment-wise DC Coding method for INTRA
    225 #define NH_3D_SDC_INTER                   1   // Segment-wise DC Coding method for INTER 
     232#define NH_3D_SDC_INTER                   1   // Segment-wise DC Coding method for INTER
    226233                                              // RWTH_SDC_DLT_B0036
    227234                                              // INTEL_SDC64_D0193
     
    249256                                              // MPI_SUBPU_DEFAULT_MV_H0077_H0099_H0111_H0133
    250257#define NH_3D_DBBP                         1   // DBBP: Depth-based Block Partitioning and Merging
    251                                               // MTK_DBBP_AMP_REM_H0072   
    252                                               // RWTH_DBBP_NO_SPU_H0057   
    253                                               // SEC_DBBP_FILTERING_H0104 
    254                                               // MTK_DBBP_SIGNALING_H0094   
    255                                               // H_3D_FIX_DBBP_IVMP Fix . Enable IVMP is always disabled, when DBBP is enabled. The original intention is to disable Sub-PU IVMP when DBBP is enabled, not to disable IVMP itself. 
     258                                              // MTK_DBBP_AMP_REM_H0072
     259                                              // RWTH_DBBP_NO_SPU_H0057
     260                                              // SEC_DBBP_FILTERING_H0104
     261                                              // MTK_DBBP_SIGNALING_H0094
     262                                              // H_3D_FIX_DBBP_IVMP Fix . Enable IVMP is always disabled, when DBBP is enabled. The original intention is to disable Sub-PU IVMP when DBBP is enabled, not to disable IVMP itself.
    256263                                              // SEC_DBBP_EXPLICIT_SIG_I0077 Remove the partition derivation and signal dbbp_flag only when the partition mode is 2NxN/Nx2N, JCT3V-I0077
    257264                                              // Disallow DBBP in 8x8 CU, JCT3V-I0078
     
    261268                                              // RWTH_DBBP_NO_SATD_K0028
    262269                                              // HS_DBBP_CLEAN_K0048
    263 #define NH_3D_DIS                         1   // Depth intra skip 
     270#define NH_3D_DIS                         1   // Depth intra skip
    264271                                              // SEC_DEPTH_INTRA_SKIP_MODE_K0033  Depth intra skip mode
    265272#define H_3D_FCO                          0   // Flexible coding order for 3D
     
    272279                                             // HHI_VPS_3D_EXTENSION_I3_J0107
    273280                                             // HHI_INTER_COMP_PRED_K0052
    274                                              // HHI_RES_PRED_K0052       
    275                                              // HHI_CAM_PARA_K0052       
    276                                              // H_3D_DIRECT_DEP_TYPE     
     281                                             // HHI_RES_PRED_K0052
     282                                             // HHI_CAM_PARA_K0052
     283                                             // H_3D_DIRECT_DEP_TYPE
    277284// Rate Control
    278285#define KWU_FIX_URQ                       0
     
    281288#endif // NH_3D
    282289/////////////////////////////////////////////////////////////////////////////////////////
    283 ///////////////////////////////////   DERIVED DEFINES /////////////////////////////////// 
     290///////////////////////////////////   DERIVED DEFINES ///////////////////////////////////
    284291/////////////////////////////////////////////////////////////////////////////////////////
    285292#if NH_3D
     
    288295#endif
    289296///// ***** VIEW SYNTHESIS OPTIMIZAION *********
    290 #if NH_3D_VSO                                 
     297#if NH_3D_VSO
    291298#define H_3D_VSO_DIST_INT                 1   // Allow negative synthesized view distortion change
    292 #define H_3D_VSO_COLOR_PLANES             1   // Compute VSO distortion on color planes 
     299#define H_3D_VSO_COLOR_PLANES             1   // Compute VSO distortion on color planes
    293300#define H_3D_VSO_EARLY_SKIP               1   // LGE_VSO_EARLY_SKIP_A0093, A0093 modification 4
    294301#define H_3D_VSO_RM_ASSERTIONS            0   // Output VSO assertions
     
    332339///////////////////////////////////   MV_HEVC HLS  //////////////////////////////
    333340/////////////////////////////////////////////////////////////////////////////////
    334 // TBD: Check if integration is necessary. 
     341// TBD: Check if integration is necessary.
    335342#define H_MV_HLS_PTL_LIMITS                  0
    336343/////////////////////////////////////////////////////////////////////////////////////////
     
    485492typedef       UInt            Distortion;        ///< distortion measurement
    486493#endif
    487 #if NH_MV                         
     494#if NH_MV
     495typedef std::vector< std::string > StringAry1d;
     496typedef std::vector< StringAry1d > StringAry2d;
    488497typedef std::vector< Int >        IntAry1d;
    489 typedef std::vector< IntAry1d >   IntAry2d; 
    490 typedef std::vector< IntAry2d >   IntAry3d; 
    491 typedef std::vector< IntAry3d >   IntAry4d; 
    492 typedef std::vector< IntAry4d >   IntAry5d; 
     498typedef std::vector< IntAry1d >   IntAry2d;
     499typedef std::vector< IntAry2d >   IntAry3d;
     500typedef std::vector< IntAry3d >   IntAry4d;
     501typedef std::vector< IntAry4d >   IntAry5d;
    493502typedef std::vector< Bool >        BoolAry1d;
    494 typedef std::vector< BoolAry1d >   BoolAry2d; 
    495 typedef std::vector< BoolAry2d >   BoolAry3d; 
    496 typedef std::vector< BoolAry3d >   BoolAry4d; 
    497 typedef std::vector< BoolAry4d >   BoolAry5d; 
     503typedef std::vector< BoolAry1d >   BoolAry2d;
     504typedef std::vector< BoolAry2d >   BoolAry3d;
     505typedef std::vector< BoolAry3d >   BoolAry4d;
     506typedef std::vector< BoolAry4d >   BoolAry5d;
    498507#endif
    499508#if NH_3D_VSO
     
    504513#if H_3D_VSO_DIST_INT
    505514typedef       Int64            Dist;       ///< RDO distortion
    506 typedef       Int64            Dist64; 
     515typedef       Int64            Dist64;
    507516#define       RDO_DIST_MIN     MIN_INT
    508517#define       RDO_DIST_MAX     MAX_INT
    509518#else
    510519typedef       UInt             Dist;       ///< RDO distortion
    511 typedef       UInt64           Dist; 
     520typedef       UInt64           Dist;
    512521#define       RDO_DIST_MIN     0
    513522#define       RDO_DIST_MAX     MAX_UINT
     
    797806  ANNEX_G,
    798807  ANNEX_H,
    799   ANNEX_I 
     808  ANNEX_I
    800809};
    801810#endif
     
    813822    ,MULTIVIEWMAIN = 6,
    814823#if NH_3D
    815     MAIN3D = 8, 
     824    MAIN3D = 8,
    816825#endif
    817826#endif
     
    941950enum ScalabilityType
    942951{
    943   DEPTH_ID = 0,   
     952  DEPTH_ID = 0,
    944953  VIEW_ORDER_INDEX  = 1,
    945954  DEPENDENCY_ID = 2,
Note: See TracChangeset for help on using the changeset viewer.