Ignore:
Timestamp:
12 Apr 2018, 11:12:21 (7 years ago)
Author:
tech
Message:
  • Update HM-16.18
  • Cleanups
  • Encoder Extension

-- Representation formats
-- Parameter set sharing
-- GOP configuration

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-16.2-dev/source/Lib/TLibCommon/SEI.h

    r1405 r1412  
    44 * granted under this license.
    55 *
    6  * Copyright (c) 2010-2016, ITU/ISO/IEC
     6 * Copyright (c) 2010-2017, ITU/ISO/IEC
    77 * All rights reserved.
    88 *
     
    6868    BUFFERING_PERIOD                     = 0,
    6969    PICTURE_TIMING                       = 1,
    70     PAN_SCAN_RECT                        = 2,
    71     FILLER_PAYLOAD                       = 3,
    72     USER_DATA_REGISTERED_ITU_T_T35       = 4,
    73     USER_DATA_UNREGISTERED               = 5,
     70    PAN_SCAN_RECT                        = 2,   // TODO: add encoder command line control to create these messages
     71    FILLER_PAYLOAD                       = 3,   // TODO: add encoder command line control to create these messages
     72    USER_DATA_REGISTERED_ITU_T_T35       = 4,   // TODO: add encoder command line control to create these messages
     73    USER_DATA_UNREGISTERED               = 5,   // TODO: add encoder command line control to create these messages
    7474    RECOVERY_POINT                       = 6,
    75     SCENE_INFO                           = 9,
    76     FULL_FRAME_SNAPSHOT                  = 15,
    77     PROGRESSIVE_REFINEMENT_SEGMENT_START = 16,
    78     PROGRESSIVE_REFINEMENT_SEGMENT_END   = 17,
    79     FILM_GRAIN_CHARACTERISTICS           = 19,
    80     POST_FILTER_HINT                     = 22,
     75    SCENE_INFO                           = 9,   // TODO: add encoder command line control to create these messages
     76    PICTURE_SNAPSHOT                     = 15,  // TODO: add encoder command line control to create these messages
     77    PROGRESSIVE_REFINEMENT_SEGMENT_START = 16,  // TODO: add encoder command line control to create these messages
     78    PROGRESSIVE_REFINEMENT_SEGMENT_END   = 17,  // TODO: add encoder command line control to create these messages
     79    FILM_GRAIN_CHARACTERISTICS           = 19,  // TODO: add encoder command line control to create these messages
     80    POST_FILTER_HINT                     = 22,  // TODO: add encoder command line control to create these messages
    8181    TONE_MAPPING_INFO                    = 23,
    8282    FRAME_PACKING                        = 45,
    8383    DISPLAY_ORIENTATION                  = 47,
     84    GREEN_METADATA                       = 56,
    8485    SOP_DESCRIPTION                      = 128,
    8586    ACTIVE_PARAMETER_SETS                = 129,
     
    9798    KNEE_FUNCTION_INFO                   = 141,
    9899    COLOUR_REMAPPING_INFO                = 142,
    99 #if U0033_ALTERNATIVE_TRANSFER_CHARACTERISTICS_SEI
    100     ALTERNATIVE_TRANSFER_CHARACTERISTICS = 182,
    101 #endif
    102     DEINTERLACED_FIELD_IDENTIFICATION         = 143,
     100    DEINTERLACE_FIELD_IDENTIFICATION     = 143, // TODO: add encoder command line control to create these messages
     101    CONTENT_LIGHT_LEVEL_INFO             = 144, // TODO: add encoder command line control to create these messages
     102    DEPENDENT_RAP_INDICATION             = 145, // TODO: add encoder command line control to create these messages
     103    CODED_REGION_COMPLETION              = 146, // TODO: add encoder command line control to create these messages
     104    ALTERNATIVE_TRANSFER_CHARACTERISTICS = 147,
     105    AMBIENT_VIEWING_ENVIRONMENT          = 148, // TODO: add encoder command line control to create these messages
     106#if NH_MV
    103107    LAYERS_NOT_PRESENT                        = 160,
    104108    INTER_LAYER_CONSTRAINED_TILE_SETS         = 161,
     
    118122    ,ALTERNATIVE_DEPTH_INFO                    = 181
    119123#endif
     124#endif
    120125
    121126  };
     
    165170};
    166171
    167 static const UInt ISO_IEC_11578_LEN=16;
    168 
    169 class SEIuserDataUnregistered : public SEI
    170 {
    171 public:
    172   PayloadType payloadType() const { return USER_DATA_UNREGISTERED; }
    173 
    174   SEIuserDataUnregistered()
    175     : userData(0)
    176     {}
    177 
    178   virtual ~SEIuserDataUnregistered()
    179   {
    180     delete userData;
    181   }
    182 
    183   UChar uuid_iso_iec_11578[ISO_IEC_11578_LEN];
    184   UInt  userDataLength;
    185   UChar *userData;
    186 };
    187 
    188 class SEIDecodedPictureHash : public SEI
    189 {
    190 public:
    191   PayloadType payloadType() const { return DECODED_PICTURE_HASH; }
    192 
    193   SEIDecodedPictureHash() {}
    194   virtual ~SEIDecodedPictureHash() {}
    195 
    196   HashType method;
    197 
    198   TComPictureHash m_pictureHash;
    199 };
    200 
    201 class SEIActiveParameterSets : public SEI
    202 {
    203 public:
    204   PayloadType payloadType() const { return ACTIVE_PARAMETER_SETS; }
    205 
    206   SEIActiveParameterSets()
    207     : activeVPSId            (0)
    208     , m_selfContainedCvsFlag (false)
    209     , m_noParameterSetUpdateFlag (false)
    210     , numSpsIdsMinus1        (0)
    211   {}
    212   virtual ~SEIActiveParameterSets() {}
    213 
    214   Int activeVPSId;
    215   Bool m_selfContainedCvsFlag;
    216   Bool m_noParameterSetUpdateFlag;
    217   Int numSpsIdsMinus1;
    218   std::vector<Int> activeSeqParameterSetId;
    219 };
     172
     173typedef std::list<SEI*> SEIMessages;
     174
     175/// output a selection of SEI messages by payload type. Ownership stays in original message list.
     176SEIMessages getSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
     177
     178/// remove a selection of SEI messages by payload type from the original list and return them in a new list.
     179SEIMessages extractSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
     180
     181/// delete list of SEI messages (freeing the referenced objects)
     182Void deleteSEIs (SEIMessages &seiList);
     183
    220184
    221185class SEIBufferingPeriod : public SEI
     
    279243};
    280244
    281 class SEIDecodingUnitInfo : public SEI
    282 {
    283 public:
    284   PayloadType payloadType() const { return DECODING_UNIT_INFO; }
    285 
    286   SEIDecodingUnitInfo()
    287     : m_decodingUnitIdx(0)
    288     , m_duSptCpbRemovalDelay(0)
    289     , m_dpbOutputDuDelayPresentFlag(false)
    290     , m_picSptDpbOutputDuDelay(0)
    291   {}
    292   virtual ~SEIDecodingUnitInfo() {}
    293   Int m_decodingUnitIdx;
    294   Int m_duSptCpbRemovalDelay;
    295   Bool m_dpbOutputDuDelayPresentFlag;
    296   Int m_picSptDpbOutputDuDelay;
    297 };
     245class SEIPanScanRect : public SEI
     246{
     247public:
     248  PayloadType payloadType() const { return PAN_SCAN_RECT; }
     249
     250  SEIPanScanRect() {}
     251  virtual ~SEIPanScanRect() {}
     252
     253  struct PanScanRect
     254  {
     255    Int leftOffset;
     256    Int rightOffset;
     257    Int topOffset;
     258    Int bottomOffset;
     259  };
     260
     261  UInt m_panScanRectId;
     262  Bool m_panScanRectCancelFlag;
     263  std::vector<PanScanRect> m_panScanRectRegions;
     264  Bool m_panScanRectPersistenceFlag;
     265};
     266
     267
     268class SEIFillerPayload : public SEI
     269{
     270public:
     271  PayloadType payloadType() const { return FILLER_PAYLOAD; }
     272
     273  SEIFillerPayload() {}
     274  virtual ~SEIFillerPayload() {}
     275
     276  UInt m_numFillerFFBytes;
     277};
     278
     279
     280class SEIUserDataRegistered : public SEI
     281{
     282public:
     283  PayloadType payloadType() const { return USER_DATA_REGISTERED_ITU_T_T35; }
     284
     285  SEIUserDataRegistered() {}
     286  virtual ~SEIUserDataRegistered() {}
     287
     288  UShort m_ituCountryCode;
     289  std::vector<UChar> m_userData;
     290};
     291
     292
     293static const UInt ISO_IEC_11578_LEN=16;
     294
     295class SEIUserDataUnregistered : public SEI
     296{
     297public:
     298  PayloadType payloadType() const { return USER_DATA_UNREGISTERED; }
     299
     300  SEIUserDataUnregistered() {}
     301  virtual ~SEIUserDataUnregistered() { }
     302
     303  UChar m_uuid_iso_iec_11578[ISO_IEC_11578_LEN];
     304  std::vector<UChar> m_userData;
     305};
     306
    298307
    299308class SEIRecoveryPoint : public SEI
     
    310319};
    311320
    312 class SEIFramePacking : public SEI
    313 {
    314 public:
    315   PayloadType payloadType() const { return FRAME_PACKING; }
    316 
    317   SEIFramePacking() {}
    318   virtual ~SEIFramePacking() {}
    319 
    320   Int  m_arrangementId;
    321   Bool m_arrangementCancelFlag;
    322   Int  m_arrangementType;
    323   Bool m_quincunxSamplingFlag;
    324   Int  m_contentInterpretationType;
    325   Bool m_spatialFlippingFlag;
    326   Bool m_frame0FlippedFlag;
    327   Bool m_fieldViewsFlag;
    328   Bool m_currentFrameIsFrame0Flag;
    329   Bool m_frame0SelfContainedFlag;
    330   Bool m_frame1SelfContainedFlag;
    331   Int  m_frame0GridPositionX;
    332   Int  m_frame0GridPositionY;
    333   Int  m_frame1GridPositionX;
    334   Int  m_frame1GridPositionY;
    335   Int  m_arrangementReservedByte;
    336   Bool m_arrangementPersistenceFlag;
    337   Bool m_upsampledAspectRatio;
    338 };
    339 
    340 class SEISegmentedRectFramePacking : public SEI
    341 {
    342 public:
    343   PayloadType payloadType() const { return SEGM_RECT_FRAME_PACKING; }
    344 
    345   SEISegmentedRectFramePacking() {}
    346   virtual ~SEISegmentedRectFramePacking() {}
    347 
    348   Bool m_arrangementCancelFlag;
    349   Int  m_contentInterpretationType;
    350   Bool m_arrangementPersistenceFlag;
    351 };
    352 
    353 class SEIDisplayOrientation : public SEI
    354 {
    355 public:
    356   PayloadType payloadType() const { return DISPLAY_ORIENTATION; }
    357 
    358   SEIDisplayOrientation()
    359     : cancelFlag(true)
    360     , persistenceFlag(0)
    361     , extensionFlag(false)
    362     {}
    363   virtual ~SEIDisplayOrientation() {}
    364 
    365   Bool cancelFlag;
    366   Bool horFlip;
    367   Bool verFlip;
    368 
    369   UInt anticlockwiseRotation;
    370   Bool persistenceFlag;
    371   Bool extensionFlag;
    372 };
    373 
    374 class SEITemporalLevel0Index : public SEI
    375 {
    376 public:
    377   PayloadType payloadType() const { return TEMPORAL_LEVEL0_INDEX; }
    378 
    379   SEITemporalLevel0Index()
    380     : tl0Idx(0)
    381     , rapIdx(0)
    382     {}
    383   virtual ~SEITemporalLevel0Index() {}
    384 
    385   UInt tl0Idx;
    386   UInt rapIdx;
    387 };
    388 
    389 class SEIGradualDecodingRefreshInfo : public SEI
    390 {
    391 public:
    392   PayloadType payloadType() const { return REGION_REFRESH_INFO; }
    393 
    394   SEIGradualDecodingRefreshInfo()
    395     : m_gdrForegroundFlag(0)
    396   {}
    397   virtual ~SEIGradualDecodingRefreshInfo() {}
    398 
    399   Bool m_gdrForegroundFlag;
    400 };
    401 
    402 class SEINoDisplay : public SEI
    403 {
    404 public:
    405   PayloadType payloadType() const { return NO_DISPLAY; }
    406 
    407   SEINoDisplay()
    408     : m_noDisplay(false)
    409   {}
    410   virtual ~SEINoDisplay() {}
    411 
    412   Bool m_noDisplay;
    413 };
    414 
    415 class SEISOPDescription : public SEI
    416 {
    417 public:
    418   PayloadType payloadType() const { return SOP_DESCRIPTION; }
    419 
    420   SEISOPDescription() {}
    421   virtual ~SEISOPDescription() {}
    422 
    423   UInt m_sopSeqParameterSetId;
    424   UInt m_numPicsInSopMinus1;
    425 
    426   UInt m_sopDescVclNaluType[MAX_NUM_PICS_IN_SOP];
    427   UInt m_sopDescTemporalId[MAX_NUM_PICS_IN_SOP];
    428   UInt m_sopDescStRpsIdx[MAX_NUM_PICS_IN_SOP];
    429   Int m_sopDescPocDelta[MAX_NUM_PICS_IN_SOP];
     321class SEISceneInfo : public SEI
     322{
     323public:
     324  PayloadType payloadType() const { return SCENE_INFO; }
     325
     326  SEISceneInfo() {}
     327  virtual ~SEISceneInfo() {}
     328
     329  Bool m_bSceneInfoPresentFlag;
     330  Bool m_bPrevSceneIdValidFlag;
     331  UInt m_sceneId;
     332  UInt m_sceneTransitionType;
     333  UInt m_secondSceneId;
     334};
     335
     336class SEIPictureSnapshot : public SEI
     337{
     338public:
     339  PayloadType payloadType() const { return PICTURE_SNAPSHOT; }
     340
     341  SEIPictureSnapshot() {}
     342  virtual ~SEIPictureSnapshot() {}
     343
     344  UInt m_snapshotId;
     345};
     346
     347
     348class SEIProgressiveRefinementSegmentStart : public SEI
     349{
     350public:
     351  PayloadType payloadType() const { return PROGRESSIVE_REFINEMENT_SEGMENT_START; }
     352
     353  SEIProgressiveRefinementSegmentStart() {}
     354  virtual ~SEIProgressiveRefinementSegmentStart() {}
     355
     356  UInt m_progressiveRefinementId;
     357  UInt m_picOrderCntDelta;
     358};
     359
     360
     361class SEIProgressiveRefinementSegmentEnd: public SEI
     362{
     363public:
     364  PayloadType payloadType() const { return PROGRESSIVE_REFINEMENT_SEGMENT_END; }
     365
     366  SEIProgressiveRefinementSegmentEnd() {}
     367  virtual ~SEIProgressiveRefinementSegmentEnd() {}
     368
     369  UInt m_progressiveRefinementId;
     370};
     371
     372
     373class SEIFilmGrainCharacteristics: public SEI
     374{
     375public:
     376  PayloadType payloadType() const { return FILM_GRAIN_CHARACTERISTICS; }
     377
     378  SEIFilmGrainCharacteristics() {}
     379  virtual ~SEIFilmGrainCharacteristics() {}
     380
     381  Bool      m_filmGrainCharacteristicsCancelFlag;
     382  UChar     m_filmGrainModelId;
     383  Bool      m_separateColourDescriptionPresentFlag;
     384  UChar     m_filmGrainBitDepthLumaMinus8;
     385  UChar     m_filmGrainBitDepthChromaMinus8;
     386  Bool      m_filmGrainFullRangeFlag;
     387  UChar     m_filmGrainColourPrimaries;
     388  UChar     m_filmGrainTransferCharacteristics;
     389  UChar     m_filmGrainMatrixCoeffs;
     390  UChar     m_blendingModeId;
     391  UChar     m_log2ScaleFactor;
     392
     393  struct CompModelIntensityValues
     394{
     395    UChar intensityIntervalLowerBound;
     396    UChar intensityIntervalUpperBound;
     397    std::vector<Int> compModelValue;
     398  };
     399
     400  struct CompModel
     401  {
     402    Bool  bPresentFlag;
     403    UChar numModelValues; // this must be the same as intensityValues[*].compModelValue.size()
     404    std::vector<CompModelIntensityValues> intensityValues;
     405  };
     406
     407  CompModel m_compModel[MAX_NUM_COMPONENT];
     408  Bool      m_filmGrainCharacteristicsPersistenceFlag;
     409
     410};
     411
     412
     413class SEIPostFilterHint: public SEI
     414{
     415public:
     416  PayloadType payloadType() const { return POST_FILTER_HINT; }
     417
     418  SEIPostFilterHint() {}
     419  virtual ~SEIPostFilterHint() {}
     420
     421  UInt             m_filterHintSizeY;
     422  UInt             m_filterHintSizeX;
     423  UInt             m_filterHintType;
     424  Bool             m_bIsMonochrome;
     425  std::vector<Int> m_filterHintValues; // values stored in linear array, [ ( ( component * sizeY + y ) * SizeX ) + x ]
    430426};
    431427
     
    465461};
    466462
     463class SEIFramePacking : public SEI
     464{
     465public:
     466  PayloadType payloadType() const { return FRAME_PACKING; }
     467
     468  SEIFramePacking() {}
     469  virtual ~SEIFramePacking() {}
     470
     471  Int  m_arrangementId;
     472  Bool m_arrangementCancelFlag;
     473  Int  m_arrangementType;
     474  Bool m_quincunxSamplingFlag;
     475  Int  m_contentInterpretationType;
     476  Bool m_spatialFlippingFlag;
     477  Bool m_frame0FlippedFlag;
     478  Bool m_fieldViewsFlag;
     479  Bool m_currentFrameIsFrame0Flag;
     480  Bool m_frame0SelfContainedFlag;
     481  Bool m_frame1SelfContainedFlag;
     482  Int  m_frame0GridPositionX;
     483  Int  m_frame0GridPositionY;
     484  Int  m_frame1GridPositionX;
     485  Int  m_frame1GridPositionY;
     486  Int  m_arrangementReservedByte;
     487  Bool m_arrangementPersistenceFlag;
     488  Bool m_upsampledAspectRatio;
     489};
     490
     491class SEIDisplayOrientation : public SEI
     492{
     493public:
     494  PayloadType payloadType() const { return DISPLAY_ORIENTATION; }
     495
     496  SEIDisplayOrientation()
     497    : cancelFlag(true)
     498    , persistenceFlag(0)
     499    , extensionFlag(false)
     500    {}
     501  virtual ~SEIDisplayOrientation() {}
     502
     503  Bool cancelFlag;
     504  Bool horFlip;
     505  Bool verFlip;
     506
     507  UInt anticlockwiseRotation;
     508  Bool persistenceFlag;
     509  Bool extensionFlag;
     510};
     511
     512
     513class SEIGreenMetadataInfo : public SEI
     514  {
     515public:
     516    PayloadType payloadType() const { return GREEN_METADATA; }
     517    SEIGreenMetadataInfo() {}
     518
     519    virtual ~SEIGreenMetadataInfo() {}
     520
     521    UInt m_greenMetadataType;
     522    UInt m_xsdMetricType;
     523    UInt m_xsdMetricValue;
     524};
     525
     526
     527class SEISOPDescription : public SEI
     528    {
     529public:
     530  PayloadType payloadType() const { return SOP_DESCRIPTION; }
     531
     532  SEISOPDescription() {}
     533  virtual ~SEISOPDescription() {}
     534
     535  UInt m_sopSeqParameterSetId;
     536  UInt m_numPicsInSopMinus1;
     537
     538  UInt m_sopDescVclNaluType[MAX_NUM_PICS_IN_SOP];
     539  UInt m_sopDescTemporalId[MAX_NUM_PICS_IN_SOP];
     540  UInt m_sopDescStRpsIdx[MAX_NUM_PICS_IN_SOP];
     541  Int m_sopDescPocDelta[MAX_NUM_PICS_IN_SOP];
     542  };
     543
     544
     545class SEIActiveParameterSets : public SEI
     546      {
     547public:
     548  PayloadType payloadType() const { return ACTIVE_PARAMETER_SETS; }
     549
     550  SEIActiveParameterSets()
     551    : activeVPSId            (0)
     552    , m_selfContainedCvsFlag (false)
     553    , m_noParameterSetUpdateFlag (false)
     554    , numSpsIdsMinus1        (0)
     555  {}
     556  virtual ~SEIActiveParameterSets() {}
     557
     558  Int activeVPSId;
     559  Bool m_selfContainedCvsFlag;
     560  Bool m_noParameterSetUpdateFlag;
     561  Int numSpsIdsMinus1;
     562  std::vector<Int> activeSeqParameterSetId;
     563};
     564
     565class SEIDecodingUnitInfo : public SEI
     566{
     567public:
     568  PayloadType payloadType() const { return DECODING_UNIT_INFO; }
     569
     570  SEIDecodingUnitInfo()
     571    : m_decodingUnitIdx(0)
     572    , m_duSptCpbRemovalDelay(0)
     573    , m_dpbOutputDuDelayPresentFlag(false)
     574    , m_picSptDpbOutputDuDelay(0)
     575  {}
     576  virtual ~SEIDecodingUnitInfo() {}
     577  Int m_decodingUnitIdx;
     578  Int m_duSptCpbRemovalDelay;
     579  Bool m_dpbOutputDuDelayPresentFlag;
     580  Int m_picSptDpbOutputDuDelay;
     581};
     582
     583class SEITemporalLevel0Index : public SEI
     584{
     585public:
     586  PayloadType payloadType() const { return TEMPORAL_LEVEL0_INDEX; }
     587
     588  SEITemporalLevel0Index()
     589    : tl0Idx(0)
     590    , rapIdx(0)
     591    {}
     592  virtual ~SEITemporalLevel0Index() {}
     593
     594  UInt tl0Idx;
     595  UInt rapIdx;
     596};
     597
     598
     599class SEIDecodedPictureHash : public SEI
     600{
     601public:
     602  PayloadType payloadType() const { return DECODED_PICTURE_HASH; }
     603
     604  SEIDecodedPictureHash() {}
     605  virtual ~SEIDecodedPictureHash() {}
     606
     607  HashType method;
     608
     609  TComPictureHash m_pictureHash;
     610};
     611
     612
     613class SEIScalableNesting : public SEI
     614{
     615public:
     616  PayloadType payloadType() const { return SCALABLE_NESTING; }
     617
     618  SEIScalableNesting() {}
     619
     620  virtual ~SEIScalableNesting()
     621  {
     622    deleteSEIs(m_nestedSEIs);
     623  }
     624
     625  Bool  m_bitStreamSubsetFlag;
     626  Bool  m_nestingOpFlag;
     627  Bool  m_defaultOpFlag;                             //value valid if m_nestingOpFlag != 0
     628  UInt  m_nestingNumOpsMinus1;                       // -"-
     629  UInt  m_nestingMaxTemporalIdPlus1[MAX_TLAYER];     // -"-
     630  UInt  m_nestingOpIdx[MAX_NESTING_NUM_OPS];         // -"-
     631
     632  Bool  m_allLayersFlag;                             //value valid if m_nestingOpFlag == 0
     633  UInt  m_nestingNoOpMaxTemporalIdPlus1;             //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
     634  UInt  m_nestingNumLayersMinus1;                    //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
     635  UChar m_nestingLayerId[MAX_NESTING_NUM_LAYER];     //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0. This can e.g. be a static array of 64 UChar values
     636
     637  SEIMessages m_nestedSEIs;
     638};
     639
     640
     641class SEIRegionRefreshInfo : public SEI
     642{
     643public:
     644  PayloadType payloadType() const { return REGION_REFRESH_INFO; }
     645
     646  SEIRegionRefreshInfo()
     647    : m_gdrForegroundFlag(0)
     648  {}
     649  virtual ~SEIRegionRefreshInfo() {}
     650
     651  Bool m_gdrForegroundFlag;
     652};
     653
     654
     655class SEINoDisplay : public SEI
     656{
     657public:
     658  PayloadType payloadType() const { return NO_DISPLAY; }
     659
     660  SEINoDisplay()
     661    : m_noDisplay(false)
     662  {}
     663  virtual ~SEINoDisplay() {}
     664
     665  Bool m_noDisplay;
     666};
     667
     668
     669class SEITimeCode : public SEI
     670{
     671public:
     672  PayloadType payloadType() const { return TIME_CODE; }
     673  SEITimeCode() {}
     674  virtual ~SEITimeCode(){}
     675
     676  UInt numClockTs;
     677  TComSEITimeSet timeSetArray[MAX_TIMECODE_SEI_SETS];
     678};
     679
     680
     681class SEIMasteringDisplayColourVolume : public SEI
     682{
     683public:
     684    PayloadType payloadType() const { return MASTERING_DISPLAY_COLOUR_VOLUME; }
     685    SEIMasteringDisplayColourVolume() {}
     686    virtual ~SEIMasteringDisplayColourVolume(){}
     687
     688    TComSEIMasteringDisplay values;
     689};
     690
     691
     692class SEISegmentedRectFramePacking : public SEI
     693{
     694public:
     695  PayloadType payloadType() const { return SEGM_RECT_FRAME_PACKING; }
     696
     697  SEISegmentedRectFramePacking() {}
     698  virtual ~SEISegmentedRectFramePacking() {}
     699
     700  Bool m_arrangementCancelFlag;
     701  Int  m_contentInterpretationType;
     702  Bool m_arrangementPersistenceFlag;
     703};
     704
     705
     706//definition according to P1005_v1;
     707class SEITempMotionConstrainedTileSets: public SEI
     708{
     709  class TileSetData
     710  {
     711    protected:
     712      std::vector<Int> m_top_left_tile_index;  //[tileSetIdx][tileIdx];
     713      std::vector<Int> m_bottom_right_tile_index;
     714
     715    public:
     716      Int     m_mcts_id;
     717      Bool    m_display_tile_set_flag;
     718      Int     m_num_tile_rects_in_set; //_minus1;
     719      Bool    m_exact_sample_value_match_flag;
     720      Bool    m_mcts_tier_level_idc_present_flag;
     721      Bool    m_mcts_tier_flag;
     722      Int     m_mcts_level_idc;
     723
     724      Void setNumberOfTileRects(const Int number)
     725      {
     726        m_top_left_tile_index    .resize(number);
     727        m_bottom_right_tile_index.resize(number);
     728      }
     729
     730      Int  getNumberOfTileRects() const
     731      {
     732        assert(m_top_left_tile_index.size() == m_bottom_right_tile_index.size());
     733        return Int(m_top_left_tile_index.size());
     734      }
     735
     736            Int &topLeftTileIndex    (const Int tileRectIndex)       { return m_top_left_tile_index    [tileRectIndex]; }
     737            Int &bottomRightTileIndex(const Int tileRectIndex)       { return m_bottom_right_tile_index[tileRectIndex]; }
     738      const Int &topLeftTileIndex    (const Int tileRectIndex) const { return m_top_left_tile_index    [tileRectIndex]; }
     739      const Int &bottomRightTileIndex(const Int tileRectIndex) const { return m_bottom_right_tile_index[tileRectIndex]; }
     740  };
     741
     742protected:
     743  std::vector<TileSetData> m_tile_set_data;
     744
     745public:
     746
     747  Bool    m_mc_all_tiles_exact_sample_value_match_flag;
     748  Bool    m_each_tile_one_tile_set_flag;
     749  Bool    m_limited_tile_set_display_flag;
     750  Bool    m_max_mcs_tier_level_idc_present_flag;
     751  Bool    m_max_mcts_tier_flag;
     752  Int     m_max_mcts_level_idc;
     753
     754  PayloadType payloadType() const { return TEMP_MOTION_CONSTRAINED_TILE_SETS; }
     755  SEITempMotionConstrainedTileSets() { }
     756  virtual ~SEITempMotionConstrainedTileSets() { }
     757
     758  Void setNumberOfTileSets(const Int number)       { m_tile_set_data.resize(number);     }
     759  Int  getNumberOfTileSets()                 const { return Int(m_tile_set_data.size()); }
     760
     761        TileSetData &tileSetData (const Int index)       { return m_tile_set_data[index]; }
     762  const TileSetData &tileSetData (const Int index) const { return m_tile_set_data[index]; }
     763
     764};
     765
     766
     767class SEIChromaResamplingFilterHint : public SEI
     768{
     769public:
     770  PayloadType payloadType() const {return CHROMA_RESAMPLING_FILTER_HINT;}
     771  SEIChromaResamplingFilterHint() {}
     772  virtual ~SEIChromaResamplingFilterHint() {}
     773
     774  Int                            m_verChromaFilterIdc;
     775  Int                            m_horChromaFilterIdc;
     776  Bool                           m_verFilteringFieldProcessingFlag;
     777  Int                            m_targetFormatIdc;
     778  Bool                           m_perfectReconstructionFlag;
     779  std::vector<std::vector<Int> > m_verFilterCoeff;
     780  std::vector<std::vector<Int> > m_horFilterCoeff;
     781};
     782
     783
    467784class SEIKneeFunctionInfo : public SEI
    468785{
     
    484801};
    485802
     803
    486804class SEIColourRemappingInfo : public SEI
    487805{
     
    503821
    504822  Void copyFrom( const SEIColourRemappingInfo &seiCriInput)
    505       {
     823  {
    506824    (*this) = seiCriInput;
    507825  }
     
    526844};
    527845
    528 class SEIChromaResamplingFilterHint : public SEI
    529 {
    530 public:
    531   PayloadType payloadType() const {return CHROMA_RESAMPLING_FILTER_HINT;}
    532   SEIChromaResamplingFilterHint() {}
    533   virtual ~SEIChromaResamplingFilterHint() {}
    534 
    535   Int   m_verChromaFilterIdc;
    536   Int   m_horChromaFilterIdc;
    537   Bool                           m_verFilteringFieldProcessingFlag;
    538   Int   m_targetFormatIdc;
    539   Bool  m_perfectReconstructionFlag;
    540   std::vector<std::vector<Int> > m_verFilterCoeff;
    541   std::vector<std::vector<Int> > m_horFilterCoeff;
    542 };
    543 
    544 class SEIMasteringDisplayColourVolume : public SEI
    545 {
    546 public:
    547     PayloadType payloadType() const { return MASTERING_DISPLAY_COLOUR_VOLUME; }
    548     SEIMasteringDisplayColourVolume() {}
    549     virtual ~SEIMasteringDisplayColourVolume(){}
    550 
    551     TComSEIMasteringDisplay values;
    552 };
    553 
    554 typedef std::list<SEI*> SEIMessages;
    555 
    556 /// output a selection of SEI messages by payload type. Ownership stays in original message list.
    557 SEIMessages getSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
    558 
    559 /// remove a selection of SEI messages by payload type from the original list and return them in a new list.
    560 SEIMessages extractSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
    561 
    562 /// delete list of SEI messages (freeing the referenced objects)
    563 Void deleteSEIs (SEIMessages &seiList);
    564 
    565 class SEIScalableNesting : public SEI
    566 {
    567 public:
    568   PayloadType payloadType() const { return SCALABLE_NESTING; }
    569 
    570   SEIScalableNesting() {}
    571 
    572   virtual ~SEIScalableNesting()
    573   {
    574     deleteSEIs(m_nestedSEIs);
    575   }
    576 
    577   Bool  m_bitStreamSubsetFlag;
    578   Bool  m_nestingOpFlag;
    579   Bool  m_defaultOpFlag;                             //value valid if m_nestingOpFlag != 0
    580   UInt  m_nestingNumOpsMinus1;                       // -"-
    581   UInt  m_nestingMaxTemporalIdPlus1[MAX_TLAYER];     // -"-
    582   UInt  m_nestingOpIdx[MAX_NESTING_NUM_OPS];         // -"-
    583 
    584   Bool  m_allLayersFlag;                             //value valid if m_nestingOpFlag == 0
    585   UInt  m_nestingNoOpMaxTemporalIdPlus1;             //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
    586   UInt  m_nestingNumLayersMinus1;                    //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
    587   UChar m_nestingLayerId[MAX_NESTING_NUM_LAYER];     //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0. This can e.g. be a static array of 64 UChar values
    588 
    589   SEIMessages m_nestedSEIs;
    590 };
    591 
    592 class SEITimeCode : public SEI
    593 {
    594 public:
    595   PayloadType payloadType() const { return TIME_CODE; }
    596   SEITimeCode() {}
    597   virtual ~SEITimeCode(){}
    598 
    599   UInt numClockTs;
    600   TComSEITimeSet timeSetArray[MAX_TIMECODE_SEI_SETS];
    601 };
    602 
    603 //definition according to P1005_v1;
    604 class SEITempMotionConstrainedTileSets: public SEI
    605 {
    606   struct TileSetData
    607   {
    608     protected:
    609       std::vector<Int> m_top_left_tile_index;  //[tileSetIdx][tileIdx];
    610       std::vector<Int> m_bottom_right_tile_index;
    611 
    612     public:
    613       Int     m_mcts_id;
    614       Bool    m_display_tile_set_flag;
    615       Int     m_num_tile_rects_in_set; //_minus1;
    616       Bool    m_exact_sample_value_match_flag;
    617       Bool    m_mcts_tier_level_idc_present_flag;
    618       Bool    m_mcts_tier_flag;
    619       Int     m_mcts_level_idc;
    620 
    621       Void setNumberOfTileRects(const Int number)
    622       {
    623         m_top_left_tile_index    .resize(number);
    624         m_bottom_right_tile_index.resize(number);
    625       }
    626 
    627       Int  getNumberOfTileRects() const
    628       {
    629         assert(m_top_left_tile_index.size() == m_bottom_right_tile_index.size());
    630         return Int(m_top_left_tile_index.size());
    631       }
    632 
    633             Int &topLeftTileIndex    (const Int tileRectIndex)       { return m_top_left_tile_index    [tileRectIndex]; }
    634             Int &bottomRightTileIndex(const Int tileRectIndex)       { return m_bottom_right_tile_index[tileRectIndex]; }
    635       const Int &topLeftTileIndex    (const Int tileRectIndex) const { return m_top_left_tile_index    [tileRectIndex]; }
    636       const Int &bottomRightTileIndex(const Int tileRectIndex) const { return m_bottom_right_tile_index[tileRectIndex]; }
    637   };
    638 
    639 protected:
    640   std::vector<TileSetData> m_tile_set_data;
    641 
    642 public:
    643 
    644   Bool    m_mc_all_tiles_exact_sample_value_match_flag;
    645   Bool    m_each_tile_one_tile_set_flag;
    646   Bool    m_limited_tile_set_display_flag;
    647   Bool    m_max_mcs_tier_level_idc_present_flag;
    648   Bool    m_max_mcts_tier_flag;
    649   Int     m_max_mcts_level_idc;
    650 
    651   PayloadType payloadType() const { return TEMP_MOTION_CONSTRAINED_TILE_SETS; }
    652 
    653   Void setNumberOfTileSets(const Int number)       { m_tile_set_data.resize(number);     }
    654   Int  getNumberOfTileSets()                 const { return Int(m_tile_set_data.size()); }
    655 
    656         TileSetData &tileSetData (const Int index)       { return m_tile_set_data[index]; }
    657   const TileSetData &tileSetData (const Int index) const { return m_tile_set_data[index]; }
    658 
    659 };
    660 
    661 #if U0033_ALTERNATIVE_TRANSFER_CHARACTERISTICS_SEI
     846
     847class SEIDeinterlaceFieldIdentification : public SEI
     848{
     849public:
     850    PayloadType payloadType() const { return  DEINTERLACE_FIELD_IDENTIFICATION; }
     851    SEIDeinterlaceFieldIdentification() { }
     852
     853    virtual ~SEIDeinterlaceFieldIdentification() {}
     854
     855    Bool m_deinterlacedPictureSourceParityFlag;
     856};
     857
     858
     859class SEIContentLightLevelInfo : public SEI
     860{
     861public:
     862    PayloadType payloadType() const { return CONTENT_LIGHT_LEVEL_INFO; }
     863    SEIContentLightLevelInfo() { }
     864
     865    virtual ~SEIContentLightLevelInfo() { }
     866
     867    UInt m_maxContentLightLevel;
     868    UInt m_maxPicAverageLightLevel;
     869};
     870
     871
     872class SEIDependentRAPIndication : public SEI
     873{
     874public:
     875  PayloadType payloadType() const { return DEPENDENT_RAP_INDICATION; }
     876  SEIDependentRAPIndication() { }
     877
     878  virtual ~SEIDependentRAPIndication() { }
     879};
     880
     881
     882class SEICodedRegionCompletion : public SEI
     883{
     884public:
     885  PayloadType payloadType() const { return CODED_REGION_COMPLETION; }
     886  SEICodedRegionCompletion() { }
     887
     888  virtual ~SEICodedRegionCompletion() { }
     889
     890  UInt m_nextSegmentAddress;
     891  Bool m_independentSliceSegmentFlag;
     892};
     893
     894
    662895class SEIAlternativeTransferCharacteristics : public SEI
    663896{
     
    672905  UInt m_preferredTransferCharacteristics;
    673906};
    674 #endif
     907
     908
     909class SEIAmbientViewingEnvironment : public SEI
     910{
     911public:
     912  PayloadType payloadType() const { return AMBIENT_VIEWING_ENVIRONMENT; }
     913  SEIAmbientViewingEnvironment() { }
     914
     915  virtual ~SEIAmbientViewingEnvironment() { }
     916
     917  UInt m_ambientIlluminance;
     918  UShort m_ambientLightX;
     919  UShort m_ambientLightY;
     920};
    675921
    676922
Note: See TracChangeset for help on using the changeset viewer.