source: SHVCSoftware/branches/SHM-dev/source/Lib/TLibCommon/SEI.h @ 1166

Last change on this file since 1166 was 1098, checked in by seregin, 9 years ago

remove ols_nesting and vps_rewriting SEI messages as a decision of AHG10 JCTVC-R0010

  • Property svn:eol-style set to native
File size: 24.1 KB
RevLine 
[313]1/* The copyright in this software is being made available under the BSD
2 * License, included below. This software may be subject to other third party
3 * and contributor rights, including patent rights, and no such rights are
4 * granted under this license.
5 *
[595]6 * Copyright (c) 2010-2014, ITU/ISO/IEC
[313]7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are met:
11 *
12 *  * Redistributions of source code must retain the above copyright notice,
13 *    this list of conditions and the following disclaimer.
14 *  * Redistributions in binary form must reproduce the above copyright notice,
15 *    this list of conditions and the following disclaimer in the documentation
16 *    and/or other materials provided with the distribution.
17 *  * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
18 *    be used to endorse or promote products derived from this software without
19 *    specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
31 * THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
[1029]34#ifndef __SEI__
35#define __SEI__
36
[313]37#pragma once
38#include <list>
39#include <vector>
40#include <cstring>
41
[1029]42#include "TypeDef.h"
43#include "libmd5/MD5.h"
[815]44#if Q0078_ADD_LAYER_SETS
45#include "TLibCommon/NAL.h"
46#endif
47
[313]48//! \ingroup TLibCommon
49//! \{
50class TComSPS;
[644]51#if O0164_MULTI_LAYER_HRD
52class TComHRD;
53#endif
[313]54
55/**
56 * Abstract class representing an SEI message with lightweight RTTI.
57 */
58class SEI
59{
60public:
61  enum PayloadType
62  {
63    BUFFERING_PERIOD                     = 0,
64    PICTURE_TIMING                       = 1,
65    PAN_SCAN_RECT                        = 2,
66    FILLER_PAYLOAD                       = 3,
67    USER_DATA_REGISTERED_ITU_T_T35       = 4,
68    USER_DATA_UNREGISTERED               = 5,
69    RECOVERY_POINT                       = 6,
70    SCENE_INFO                           = 9,
71    FULL_FRAME_SNAPSHOT                  = 15,
72    PROGRESSIVE_REFINEMENT_SEGMENT_START = 16,
73    PROGRESSIVE_REFINEMENT_SEGMENT_END   = 17,
74    FILM_GRAIN_CHARACTERISTICS           = 19,
75    POST_FILTER_HINT                     = 22,
76    TONE_MAPPING_INFO                    = 23,
77    FRAME_PACKING                        = 45,
78    DISPLAY_ORIENTATION                  = 47,
79    SOP_DESCRIPTION                      = 128,
80    ACTIVE_PARAMETER_SETS                = 129,
81    DECODING_UNIT_INFO                   = 130,
82    TEMPORAL_LEVEL0_INDEX                = 131,
83    DECODED_PICTURE_HASH                 = 132,
84    SCALABLE_NESTING                     = 133,
85    REGION_REFRESH_INFO                  = 134,
[1029]86    NO_DISPLAY                           = 135,
87    TIME_CODE                            = 136,
88    MASTERING_DISPLAY_COLOUR_VOLUME      = 137,
89    SEGM_RECT_FRAME_PACKING              = 138,
90    TEMP_MOTION_CONSTRAINED_TILE_SETS    = 139,
91    CHROMA_SAMPLING_FILTER_HINT          = 140,
92    KNEE_FUNCTION_INFO                   = 141,
[1097]93#if Q0074_COLOUR_REMAPPING_SEI
94    COLOUR_REMAPPING_INFO                = 142,
95#endif
[588]96#if LAYERS_NOT_PRESENT_SEI
[1097]97    LAYERS_NOT_PRESENT                   = 160,
[313]98#endif
[442]99#if N0383_IL_CONSTRAINED_TILE_SETS_SEI
[1097]100    INTER_LAYER_CONSTRAINED_TILE_SETS    = 161,
[442]101#endif
[1097]102#if O0164_MULTI_LAYER_HRD
103    BSP_NESTING                          = 162,
104    BSP_INITIAL_ARRIVAL_TIME             = 163,
105#endif
[588]106#if SUB_BITSTREAM_PROPERTY_SEI
[1097]107    SUB_BITSTREAM_PROPERTY               = 164,
[588]108#endif
[1097]109#if P0123_ALPHA_CHANNEL_SEI
110    ALPHA_CHANNEL_INFO                   = 165,
[644]111#endif
[1097]112#if Q0096_OVERLAY_SEI
113    OVERLAY_INFO                         = 166,
[713]114#endif
[815]115#if Q0189_TMVP_CONSTRAINTS
[1097]116    TMVP_CONSTRAINTS                     = 167,
[815]117#endif
118#if Q0247_FRAME_FIELD_INFO
[1097]119    FRAME_FIELD_INFO                     = 168,
[815]120#endif
[313]121  };
122 
123  SEI() {}
124  virtual ~SEI() {}
125 
[1029]126  static const Char *getSEIMessageString(SEI::PayloadType payloadType);
127
[313]128  virtual PayloadType payloadType() const = 0;
129};
130
[1029]131static const UInt ISO_IEC_11578_LEN=16;
132
[313]133class SEIuserDataUnregistered : public SEI
134{
135public:
136  PayloadType payloadType() const { return USER_DATA_UNREGISTERED; }
137
138  SEIuserDataUnregistered()
139    : userData(0)
140    {}
141
142  virtual ~SEIuserDataUnregistered()
143  {
144    delete userData;
145  }
146
[1029]147  UChar uuid_iso_iec_11578[ISO_IEC_11578_LEN];
[313]148  UInt userDataLength;
149  UChar *userData;
150};
151
152class SEIDecodedPictureHash : public SEI
153{
154public:
155  PayloadType payloadType() const { return DECODED_PICTURE_HASH; }
156
157  SEIDecodedPictureHash() {}
158  virtual ~SEIDecodedPictureHash() {}
159 
160  enum Method
161  {
162    MD5,
163    CRC,
164    CHECKSUM,
165    RESERVED,
166  } method;
167
[1029]168  TComDigest m_digest;
[313]169};
170
171class SEIActiveParameterSets : public SEI
172{
173public:
174  PayloadType payloadType() const { return ACTIVE_PARAMETER_SETS; }
175
176  SEIActiveParameterSets() 
177    : activeVPSId            (0)
[713]178    , m_selfContainedCvsFlag (false)
179    , m_noParameterSetUpdateFlag (false)
[313]180    , numSpsIdsMinus1        (0)
181  {}
182  virtual ~SEIActiveParameterSets() {}
183
184  Int activeVPSId; 
[713]185  Bool m_selfContainedCvsFlag;
186  Bool m_noParameterSetUpdateFlag;
[313]187  Int numSpsIdsMinus1;
[713]188  std::vector<Int> activeSeqParameterSetId; 
[884]189#if R0247_SEI_ACTIVE
190  std::vector<Int> layerSpsIdx; 
191#endif
[313]192};
193
194class SEIBufferingPeriod : public SEI
195{
196public:
197  PayloadType payloadType() const { return BUFFERING_PERIOD; }
198
199  SEIBufferingPeriod()
200  : m_bpSeqParameterSetId (0)
201  , m_rapCpbParamsPresentFlag (false)
202  , m_cpbDelayOffset      (0)
203  , m_dpbDelayOffset      (0)
[644]204#if P0138_USE_ALT_CPB_PARAMS_FLAG
205  , m_useAltCpbParamsFlagPresent(false)
206  , m_useAltCpbParamsFlag (false)
207#endif
[313]208  {
209    ::memset(m_initialCpbRemovalDelay, 0, sizeof(m_initialCpbRemovalDelay));
210    ::memset(m_initialCpbRemovalDelayOffset, 0, sizeof(m_initialCpbRemovalDelayOffset));
211    ::memset(m_initialAltCpbRemovalDelay, 0, sizeof(m_initialAltCpbRemovalDelay));
212    ::memset(m_initialAltCpbRemovalDelayOffset, 0, sizeof(m_initialAltCpbRemovalDelayOffset));
213  }
214  virtual ~SEIBufferingPeriod() {}
215
216  UInt m_bpSeqParameterSetId;
217  Bool m_rapCpbParamsPresentFlag;
[823]218  UInt m_cpbDelayOffset;
219  UInt m_dpbDelayOffset;
[313]220  UInt m_initialCpbRemovalDelay         [MAX_CPB_CNT][2];
221  UInt m_initialCpbRemovalDelayOffset   [MAX_CPB_CNT][2];
222  UInt m_initialAltCpbRemovalDelay      [MAX_CPB_CNT][2];
223  UInt m_initialAltCpbRemovalDelayOffset[MAX_CPB_CNT][2];
224  Bool m_concatenationFlag;
225  UInt m_auCpbRemovalDelayDelta;
[644]226#if P0138_USE_ALT_CPB_PARAMS_FLAG
227  Bool m_useAltCpbParamsFlagPresent;
228  Bool m_useAltCpbParamsFlag;
229#endif
[313]230};
231class SEIPictureTiming : public SEI
232{
233public:
234  PayloadType payloadType() const { return PICTURE_TIMING; }
235
236  SEIPictureTiming()
237  : m_picStruct               (0)
238  , m_sourceScanType          (0)
239  , m_duplicateFlag           (false)
240  , m_picDpbOutputDuDelay     (0)
241  , m_numNalusInDuMinus1      (NULL)
242  , m_duCpbRemovalDelayMinus1 (NULL)
243  {}
244  virtual ~SEIPictureTiming()
245  {
246    if( m_numNalusInDuMinus1 != NULL )
247    {
248      delete m_numNalusInDuMinus1;
249    }
250    if( m_duCpbRemovalDelayMinus1  != NULL )
251    {
252      delete m_duCpbRemovalDelayMinus1;
253    }
254  }
255
256  UInt  m_picStruct;
257  UInt  m_sourceScanType;
258  Bool  m_duplicateFlag;
259
260  UInt  m_auCpbRemovalDelay;
261  UInt  m_picDpbOutputDelay;
262  UInt  m_picDpbOutputDuDelay;
263  UInt  m_numDecodingUnitsMinus1;
264  Bool  m_duCommonCpbRemovalDelayFlag;
265  UInt  m_duCommonCpbRemovalDelayMinus1;
266  UInt* m_numNalusInDuMinus1;
267  UInt* m_duCpbRemovalDelayMinus1;
268};
269
270class SEIDecodingUnitInfo : public SEI
271{
272public:
273  PayloadType payloadType() const { return DECODING_UNIT_INFO; }
274
275  SEIDecodingUnitInfo()
276    : m_decodingUnitIdx(0)
277    , m_duSptCpbRemovalDelay(0)
278    , m_dpbOutputDuDelayPresentFlag(false)
279    , m_picSptDpbOutputDuDelay(0)
280  {}
281  virtual ~SEIDecodingUnitInfo() {}
282  Int m_decodingUnitIdx;
283  Int m_duSptCpbRemovalDelay;
284  Bool m_dpbOutputDuDelayPresentFlag;
285  Int m_picSptDpbOutputDuDelay;
286};
287
288class SEIRecoveryPoint : public SEI
289{
290public:
291  PayloadType payloadType() const { return RECOVERY_POINT; }
292
293  SEIRecoveryPoint() {}
294  virtual ~SEIRecoveryPoint() {}
295
296  Int  m_recoveryPocCnt;
297  Bool m_exactMatchingFlag;
298  Bool m_brokenLinkFlag;
299};
[1029]300
[313]301class SEIFramePacking : public SEI
302{
303public:
304  PayloadType payloadType() const { return FRAME_PACKING; }
305
306  SEIFramePacking() {}
307  virtual ~SEIFramePacking() {}
308
309  Int  m_arrangementId;
310  Bool m_arrangementCancelFlag;
311  Int  m_arrangementType;
312  Bool m_quincunxSamplingFlag;
313  Int  m_contentInterpretationType;
314  Bool m_spatialFlippingFlag;
315  Bool m_frame0FlippedFlag;
316  Bool m_fieldViewsFlag;
317  Bool m_currentFrameIsFrame0Flag;
318  Bool m_frame0SelfContainedFlag;
319  Bool m_frame1SelfContainedFlag;
320  Int  m_frame0GridPositionX;
321  Int  m_frame0GridPositionY;
322  Int  m_frame1GridPositionX;
323  Int  m_frame1GridPositionY;
324  Int  m_arrangementReservedByte;
325  Bool m_arrangementPersistenceFlag;
326  Bool m_upsampledAspectRatio;
327};
328
[1029]329class SEISegmentedRectFramePacking : public SEI
330{
331public:
332  PayloadType payloadType() const { return SEGM_RECT_FRAME_PACKING; }
333
334  SEISegmentedRectFramePacking() {}
335  virtual ~SEISegmentedRectFramePacking() {}
336
337  Bool m_arrangementCancelFlag;
338  Int  m_contentInterpretationType;
339  Bool m_arrangementPersistenceFlag;
340};
341
[313]342class SEIDisplayOrientation : public SEI
343{
344public:
345  PayloadType payloadType() const { return DISPLAY_ORIENTATION; }
346
347  SEIDisplayOrientation()
348    : cancelFlag(true)
349    , persistenceFlag(0)
350    , extensionFlag(false)
351    {}
352  virtual ~SEIDisplayOrientation() {}
353
354  Bool cancelFlag;
355  Bool horFlip;
356  Bool verFlip;
357
358  UInt anticlockwiseRotation;
359  Bool persistenceFlag;
360  Bool extensionFlag;
361};
362
363class SEITemporalLevel0Index : public SEI
364{
365public:
366  PayloadType payloadType() const { return TEMPORAL_LEVEL0_INDEX; }
367
368  SEITemporalLevel0Index()
369    : tl0Idx(0)
370    , rapIdx(0)
371    {}
372  virtual ~SEITemporalLevel0Index() {}
373
374  UInt tl0Idx;
375  UInt rapIdx;
376};
377
378class SEIGradualDecodingRefreshInfo : public SEI
379{
380public:
381  PayloadType payloadType() const { return REGION_REFRESH_INFO; }
382
383  SEIGradualDecodingRefreshInfo()
384    : m_gdrForegroundFlag(0)
385  {}
386  virtual ~SEIGradualDecodingRefreshInfo() {}
387
388  Bool m_gdrForegroundFlag;
389};
390
[1029]391class SEINoDisplay : public SEI
[313]392{
393public:
[1029]394  PayloadType payloadType() const { return NO_DISPLAY; }
[313]395
[1029]396  SEINoDisplay()
397    : m_noDisplay(false)
398  {}
399  virtual ~SEINoDisplay() {}
[313]400
[1029]401  Bool m_noDisplay;
[313]402};
403
404class SEISOPDescription : public SEI
405{
406public:
407  PayloadType payloadType() const { return SOP_DESCRIPTION; }
408
409  SEISOPDescription() {}
410  virtual ~SEISOPDescription() {}
411
412  UInt m_sopSeqParameterSetId;
413  UInt m_numPicsInSopMinus1;
414
415  UInt m_sopDescVclNaluType[MAX_NUM_PICS_IN_SOP];
416  UInt m_sopDescTemporalId[MAX_NUM_PICS_IN_SOP];
417  UInt m_sopDescStRpsIdx[MAX_NUM_PICS_IN_SOP];
418  Int m_sopDescPocDelta[MAX_NUM_PICS_IN_SOP];
419};
420
421class SEIToneMappingInfo : public SEI
422{
423public:
424  PayloadType payloadType() const { return TONE_MAPPING_INFO; }
425  SEIToneMappingInfo() {}
426  virtual ~SEIToneMappingInfo() {}
427
428  Int    m_toneMapId;
429  Bool   m_toneMapCancelFlag;
430  Bool   m_toneMapPersistenceFlag;
431  Int    m_codedDataBitDepth;
432  Int    m_targetBitDepth;
433  Int    m_modelId;
434  Int    m_minValue;
435  Int    m_maxValue;
436  Int    m_sigmoidMidpoint;
437  Int    m_sigmoidWidth;
438  std::vector<Int> m_startOfCodedInterval;
439  Int    m_numPivots;
440  std::vector<Int> m_codedPivotValue;
441  std::vector<Int> m_targetPivotValue;
442  Int    m_cameraIsoSpeedIdc;
443  Int    m_cameraIsoSpeedValue;
[713]444  Int    m_exposureIndexIdc;
445  Int    m_exposureIndexValue;
[313]446  Int    m_exposureCompensationValueSignFlag;
447  Int    m_exposureCompensationValueNumerator;
448  Int    m_exposureCompensationValueDenomIdc;
449  Int    m_refScreenLuminanceWhite;
450  Int    m_extendedRangeWhiteLevel;
451  Int    m_nominalBlackLevelLumaCodeValue;
452  Int    m_nominalWhiteLevelLumaCodeValue;
453  Int    m_extendedWhiteLevelLumaCodeValue;
454};
[1029]455
[815]456class SEIKneeFunctionInfo : public SEI
457{
458public:
459  PayloadType payloadType() const { return KNEE_FUNCTION_INFO; }
460  SEIKneeFunctionInfo() {}
461  virtual ~SEIKneeFunctionInfo() {}
[313]462
[815]463  Int   m_kneeId;
464  Bool  m_kneeCancelFlag;
465  Bool  m_kneePersistenceFlag;
466  Int   m_kneeInputDrange;
467  Int   m_kneeInputDispLuminance;
468  Int   m_kneeOutputDrange;
469  Int   m_kneeOutputDispLuminance;
470  Int   m_kneeNumKneePointsMinus1;
471  std::vector<Int> m_kneeInputKneePoint;
472  std::vector<Int> m_kneeOutputKneePoint;
473};
[1029]474
475class SEIChromaSamplingFilterHint : public SEI
476{
477public:
478  PayloadType payloadType() const {return CHROMA_SAMPLING_FILTER_HINT;}
479  SEIChromaSamplingFilterHint() {}
480  virtual ~SEIChromaSamplingFilterHint() {
481    if(m_verChromaFilterIdc == 1)
482    {
483      for(Int i = 0; i < m_numVerticalFilters; i ++)
484      {
485        free(m_verFilterCoeff[i]);
486      }
487      free(m_verFilterCoeff);
488      free(m_verTapLengthMinus1);
489    }
490    if(m_horChromaFilterIdc == 1)
491    {
492      for(Int i = 0; i < m_numHorizontalFilters; i ++)
493      {
494        free(m_horFilterCoeff[i]);
495      }
496      free(m_horFilterCoeff);
497      free(m_horTapLengthMinus1);
498    }
499  }
500
501  Int   m_verChromaFilterIdc;
502  Int   m_horChromaFilterIdc;
503  Bool  m_verFilteringProcessFlag;
504  Int   m_targetFormatIdc;
505  Bool  m_perfectReconstructionFlag;
506  Int   m_numVerticalFilters;
507  Int*  m_verTapLengthMinus1;
508  Int** m_verFilterCoeff;
509  Int   m_numHorizontalFilters;
510  Int*  m_horTapLengthMinus1;
511  Int** m_horFilterCoeff;
512};
513
514class SEIMasteringDisplayColourVolume : public SEI
515{
516public:
517    PayloadType payloadType() const { return MASTERING_DISPLAY_COLOUR_VOLUME; }
518    SEIMasteringDisplayColourVolume() {}
519    virtual ~SEIMasteringDisplayColourVolume(){}
520   
521    TComSEIMasteringDisplay values;
522};
523
524typedef std::list<SEI*> SEIMessages;
525
526/// output a selection of SEI messages by payload type. Ownership stays in original message list.
527SEIMessages getSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
528
529/// remove a selection of SEI messages by payload type from the original list and return them in a new list.
530SEIMessages extractSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
531
532/// delete list of SEI messages (freeing the referenced objects)
533Void deleteSEIs (SEIMessages &seiList);
534
535class SEIScalableNesting : public SEI
536{
537public:
538  PayloadType payloadType() const { return SCALABLE_NESTING; }
539
[1070]540  SEIScalableNesting()
541    : m_callerOwnsSEIs(false)
542  {}
[1029]543  virtual ~SEIScalableNesting()
544  {
545    if (!m_callerOwnsSEIs)
546    {
547      deleteSEIs(m_nestedSEIs);
548    }
549  }
550
551  Bool  m_bitStreamSubsetFlag;
552  Bool  m_nestingOpFlag;
553  Bool  m_defaultOpFlag;                             //value valid if m_nestingOpFlag != 0
554  UInt  m_nestingNumOpsMinus1;                       // -"-
555  UInt  m_nestingMaxTemporalIdPlus1[MAX_TLAYER];     // -"-
556  UInt  m_nestingOpIdx[MAX_NESTING_NUM_OPS];         // -"-
557
558  Bool  m_allLayersFlag;                             //value valid if m_nestingOpFlag == 0
559  UInt  m_nestingNoOpMaxTemporalIdPlus1;             //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
560  UInt  m_nestingNumLayersMinus1;                    //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
561  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
562
563  Bool  m_callerOwnsSEIs;
564  SEIMessages m_nestedSEIs;
565};
566
567class SEITimeCode : public SEI
568{
569public:
570  PayloadType payloadType() const { return TIME_CODE; }
571  SEITimeCode() {}
572  virtual ~SEITimeCode(){}
573
574  UInt numClockTs;
575  TComSEITimeSet timeSetArray[MAX_TIMECODE_SEI_SETS];
576};
577
578//definition according to P1005_v1;
579class SEITempMotionConstrainedTileSets: public SEI
580{
581  struct TileSetData
582  {
583    protected:
584      std::vector<Int> m_top_left_tile_index;  //[tileSetIdx][tileIdx];
585      std::vector<Int> m_bottom_right_tile_index;
586
587    public:
588      Int     m_mcts_id; 
589      Bool    m_display_tile_set_flag;
590      Int     m_num_tile_rects_in_set; //_minus1;
591      Bool    m_exact_sample_value_match_flag;
592      Bool    m_mcts_tier_level_idc_present_flag;
593      Bool    m_mcts_tier_flag;
594      Int     m_mcts_level_idc;
595
596      Void setNumberOfTileRects(const Int number)
597      {
598        m_top_left_tile_index    .resize(number);
599        m_bottom_right_tile_index.resize(number);
600      }
601
602      Int  getNumberOfTileRects() const
603      {
604        assert(m_top_left_tile_index.size() == m_bottom_right_tile_index.size());
605        return Int(m_top_left_tile_index.size());
606      }
607
608            Int &topLeftTileIndex    (const Int tileRectIndex)       { return m_top_left_tile_index    [tileRectIndex]; }
609            Int &bottomRightTileIndex(const Int tileRectIndex)       { return m_bottom_right_tile_index[tileRectIndex]; }
610      const Int &topLeftTileIndex    (const Int tileRectIndex) const { return m_top_left_tile_index    [tileRectIndex]; }
611      const Int &bottomRightTileIndex(const Int tileRectIndex) const { return m_bottom_right_tile_index[tileRectIndex]; }
612  };
613
614protected:
615  std::vector<TileSetData> m_tile_set_data;
616
617public:
618
619  Bool    m_mc_all_tiles_exact_sample_value_match_flag;
620  Bool    m_each_tile_one_tile_set_flag;
621  Bool    m_limited_tile_set_display_flag;
622  Bool    m_max_mcs_tier_level_idc_present_flag;
623  Bool    m_max_mcts_tier_flag;
624  Int     m_max_mcts_level_idc;
625
626  PayloadType payloadType() const { return TEMP_MOTION_CONSTRAINED_TILE_SETS; }
627
628  Void setNumberOfTileSets(const Int number)       { m_tile_set_data.resize(number);     }
629  Int  getNumberOfTileSets()                 const { return Int(m_tile_set_data.size()); }
630
631        TileSetData &tileSetData (const Int index)       { return m_tile_set_data[index]; }
632  const TileSetData &tileSetData (const Int index) const { return m_tile_set_data[index]; }
633
634};
635
[1037]636#if P0123_ALPHA_CHANNEL_SEI
637class SEIAlphaChannelInfo : public SEI
638{
639public:
640  PayloadType payloadType() const { return ALPHA_CHANNEL_INFO; }
641  SEIAlphaChannelInfo() {}
642  virtual ~SEIAlphaChannelInfo() {}
643  Bool m_alphaChannelCancelFlag;
644  UInt m_alphaChannelUseIdc;
645  UInt m_alphaChannelBitDepthMinus8;
646  UInt m_alphaTransparentValue;
647  UInt m_alphaOpaqueValue;
648  Bool m_alphaChannelIncrFlag;
649  Bool m_alphaChannelClipFlag;
650  Bool m_alphaChannelClipTypeFlag;
651};
652#endif
653
[1029]654#if Q0096_OVERLAY_SEI
655class SEIOverlayInfo : public SEI
656{
657public:
658  PayloadType payloadType() const { return OVERLAY_INFO; }
659  SEIOverlayInfo() 
660    :  m_numOverlaysMinus1(-1) 
661    {}
662
663  virtual ~SEIOverlayInfo() 
664  {
665    for (Int i=0 ; i<=m_numOverlaysMinus1 ; i++)
666    { 
667      delete [] m_overlayLanguage[i];         
668      delete [] m_overlayName[i];
669      for (Int j=0 ; j<=m_numOverlayElementsMinus1[i] ; j++)
670      {
671        delete [] m_overlayElementName[i][j];
672      }
673    }
674  }
675
676  Bool                                m_overlayInfoCancelFlag;
677  UInt                                m_overlayContentAuxIdMinus128;
678  UInt                                m_overlayLabelAuxIdMinus128;
679  UInt                                m_overlayAlphaAuxIdMinus128;
680  UInt                                m_overlayElementLabelValueLengthMinus8;
681  UInt                                m_numOverlaysMinus1;
682  std::vector<UInt>                   m_overlayIdx;
683  std::vector<Bool>                   m_languageOverlayPresentFlag;
684  std::vector<UInt>                   m_overlayContentLayerId;
685  std::vector<Bool>                   m_overlayLabelPresentFlag;
686  std::vector<UInt>                   m_overlayLabelLayerId;
687  std::vector<Bool>                   m_overlayAlphaPresentFlag;
688  std::vector<UInt>                   m_overlayAlphaLayerId;
689  std::vector<UInt>                   m_numOverlayElementsMinus1;
690  std::vector< std::vector<UInt> >    m_overlayElementLabelMin;
691  std::vector< std::vector<UInt> >    m_overlayElementLabelMax;
692  std::vector<UChar*>                 m_overlayLanguage;
693  std::vector<UInt>                   m_overlayLanguageLength;
694  std::vector<UChar*>                 m_overlayName;
695  std::vector<UInt>                   m_overlayNameLength;
696  std::vector< std::vector<UChar*> >  m_overlayElementName;
697  std::vector< std::vector<UInt> >    m_overlayElementNameLength;
698  Bool                                m_overlayInfoPersistenceFlag;
699};
700#endif
701
702#if LAYERS_NOT_PRESENT_SEI
703class SEILayersNotPresent : public SEI
704{
705public:
706  PayloadType payloadType() const { return LAYERS_NOT_PRESENT; }
707
708  SEILayersNotPresent() {}
709  virtual ~SEILayersNotPresent() {}
710
711  UInt m_activeVpsId;
712  UInt m_vpsMaxLayers;
713  Bool m_layerNotPresentFlag[MAX_LAYERS];
714};
715#endif
716
[856]717#if Q0074_COLOUR_REMAPPING_SEI
718class SEIColourRemappingInfo : public SEI
[713]719{
720public:
[856]721  PayloadType payloadType() const { return COLOUR_REMAPPING_INFO; }
722  SEIColourRemappingInfo() {}
723  ~SEIColourRemappingInfo() {}
[1089]724
725  Void  copyFrom( SEIColourRemappingInfo const * SeiCriInput);
[856]726 
727  Int   m_colourRemapId;
728  Bool  m_colourRemapCancelFlag;
729  Bool  m_colourRemapPersistenceFlag;
[868]730  Bool  m_colourRemapVideoSignalInfoPresentFlag;
731  Bool  m_colourRemapFullRangeFlag;
[856]732  Int   m_colourRemapPrimaries;
[868]733  Int   m_colourRemapTransferFunction;
734  Int   m_colourRemapMatrixCoefficients;
735  Int   m_colourRemapInputBitDepth;
736  Int   m_colourRemapBitDepth;
[856]737  Int   m_preLutNumValMinus1[3];
738  std::vector<Int> m_preLutCodedValue[3];
739  std::vector<Int> m_preLutTargetValue[3];
740  Bool  m_colourRemapMatrixPresentFlag;
741  Int   m_log2MatrixDenom;
742  Int   m_colourRemapCoeffs[3][3];
743  Int   m_postLutNumValMinus1[3];
744  std::vector<Int> m_postLutCodedValue[3];
745  std::vector<Int> m_postLutTargetValue[3];
[713]746};
747#endif
748
[442]749#if N0383_IL_CONSTRAINED_TILE_SETS_SEI
750class SEIInterLayerConstrainedTileSets : public SEI
751{
752public:
753  PayloadType payloadType() const { return INTER_LAYER_CONSTRAINED_TILE_SETS; }
754
755  SEIInterLayerConstrainedTileSets() {}
756  virtual ~SEIInterLayerConstrainedTileSets() {}
757
758  Bool m_ilAllTilesExactSampleValueMatchFlag;
759  Bool m_ilOneTilePerTileSetFlag;
760  UInt m_ilNumSetsInMessageMinus1;
761  Bool m_skippedTileSetPresentFlag;
762  UInt m_ilctsId[256];
763  UInt m_ilNumTileRectsInSetMinus1[256];
764  UInt m_ilTopLeftTileIndex[256][440];
765  UInt m_ilBottomRightTileIndex[256][440];
766  UInt m_ilcIdc[256];
767  Bool m_ilExactSampleValueMatchFlag[256];
768  UInt m_allTilesIlcIdc;
769};
770#endif
771
[588]772#if SUB_BITSTREAM_PROPERTY_SEI
773class SEISubBitstreamProperty : public SEI
774{
775public:
776  PayloadType payloadType() const { return SUB_BITSTREAM_PROPERTY; }
[442]777
[588]778  SEISubBitstreamProperty();
779  virtual ~SEISubBitstreamProperty() {}
780
781  Int  m_activeVpsId;
782  Int  m_numAdditionalSubStreams;
783  Int  m_subBitstreamMode       [MAX_SUB_STREAMS];
784  Int  m_outputLayerSetIdxToVps [MAX_SUB_STREAMS];
785  Int  m_highestSublayerId      [MAX_SUB_STREAMS];
786  Int  m_avgBitRate             [MAX_SUB_STREAMS];
787  Int  m_maxBitRate             [MAX_SUB_STREAMS];
788};
789#endif
790
[815]791#if Q0189_TMVP_CONSTRAINTS
792class SEITMVPConstrains : public SEI
793{
794public:
795  PayloadType payloadType() const { return TMVP_CONSTRAINTS; }
796
797  SEITMVPConstrains()
798    : prev_pics_not_used_flag(0),no_intra_layer_col_pic_flag(0)
799    {}
800
801  virtual ~SEITMVPConstrains()
802  {
803  }
804
805  UInt prev_pics_not_used_flag;
806  UInt no_intra_layer_col_pic_flag;
807};
808#endif
809
810#if Q0247_FRAME_FIELD_INFO
811class SEIFrameFieldInfo: public SEI
812{
813public:
814  PayloadType payloadType() const { return FRAME_FIELD_INFO; }
815
816  SEIFrameFieldInfo()
817    : m_ffinfo_picStruct(0),m_ffinfo_sourceScanType(0), m_ffinfo_duplicateFlag(false)
818    {}
819
820  virtual ~SEIFrameFieldInfo()
821  {
822  }
823
824  UInt  m_ffinfo_picStruct;
825  UInt  m_ffinfo_sourceScanType;
826  Bool  m_ffinfo_duplicateFlag;
827};
828#endif
829
[644]830#if O0164_MULTI_LAYER_HRD
831class SEIBspNesting : public SEI
832{
833public:
834  PayloadType payloadType() const { return BSP_NESTING; }
835
[1070]836  SEIBspNesting()
837    : m_callerOwnsSEIs(false)
838  {}
[644]839  virtual ~SEIBspNesting()
840  {
841    if (!m_callerOwnsSEIs)
842    {
843      deleteSEIs(m_nestedSEIs);
844    }
845  }
846
847  Int  m_bspIdx;
848  Bool  m_callerOwnsSEIs;
849  SEIMessages m_nestedSEIs;
[894]850#if VPS_VUI_BSP_HRD_PARAMS
851  Int  m_seiPartitioningSchemeIdx;
852  Int  m_seiOlsIdx;
853#endif
[644]854};
855
856class SEIBspInitialArrivalTime : public SEI
857{
858public:
859  PayloadType payloadType() const { return BSP_INITIAL_ARRIVAL_TIME; }
860
861  SEIBspInitialArrivalTime () {}
862  virtual ~SEIBspInitialArrivalTime () {}
863
864  UInt m_nalInitialArrivalDelay[256];
865  UInt m_vclInitialArrivalDelay[256];
866};
[846]867#endif
[644]868
869#endif
[313]870//! \}
Note: See TracBrowser for help on using the repository browser.