source: SHVCSoftware/branches/SHM-upgrade/source/Lib/TLibCommon/SEI.h

Last change on this file was 916, checked in by seregin, 10 years ago

initial porting

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