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

Last change on this file since 862 was 856, checked in by seregin, 10 years ago

CRI SEI patch provided by Andrivon Pierre <Pierre.Andrivon@…>

Changes:

  • General code cleaning-up and improvement
  • Alignment of code with latest spec (JCTVC-R1013_v3)
  • Tested successfully for macro SVC_EXTENSION=1 and SVC_EXTENSION=0

At the encoder, parameters of the SEI are input through a file.
At the decoder, when present, CRI SEI is applied with the runtime parameter --SEIColourRemappingInfo (same as --SEIDecodedPictureHash)

  • Property svn:eol-style set to native
File size: 18.4 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#pragma once
35#include <list>
36#include <vector>
37#include <cstring>
38
39#if Q0078_ADD_LAYER_SETS
40#include "TLibCommon/NAL.h"
41#endif
42
43//! \ingroup TLibCommon
44//! \{
45class TComSPS;
46#if O0164_MULTI_LAYER_HRD
47class TComHRD;
48#endif
49
50/**
51 * Abstract class representing an SEI message with lightweight RTTI.
52 */
53class SEI
54{
55public:
56  enum PayloadType
57  {
58    BUFFERING_PERIOD                     = 0,
59    PICTURE_TIMING                       = 1,
60    PAN_SCAN_RECT                        = 2,
61    FILLER_PAYLOAD                       = 3,
62    USER_DATA_REGISTERED_ITU_T_T35       = 4,
63    USER_DATA_UNREGISTERED               = 5,
64    RECOVERY_POINT                       = 6,
65    SCENE_INFO                           = 9,
66    FULL_FRAME_SNAPSHOT                  = 15,
67    PROGRESSIVE_REFINEMENT_SEGMENT_START = 16,
68    PROGRESSIVE_REFINEMENT_SEGMENT_END   = 17,
69    FILM_GRAIN_CHARACTERISTICS           = 19,
70    POST_FILTER_HINT                     = 22,
71    TONE_MAPPING_INFO                    = 23,
72#if P0050_KNEE_FUNCTION_SEI
73    KNEE_FUNCTION_INFO                   = 24,
74#endif
75    FRAME_PACKING                        = 45,
76    DISPLAY_ORIENTATION                  = 47,
77    SOP_DESCRIPTION                      = 128,
78    ACTIVE_PARAMETER_SETS                = 129,
79    DECODING_UNIT_INFO                   = 130,
80    TEMPORAL_LEVEL0_INDEX                = 131,
81    DECODED_PICTURE_HASH                 = 132,
82    SCALABLE_NESTING                     = 133,
83    REGION_REFRESH_INFO                  = 134,
84#if LAYERS_NOT_PRESENT_SEI
85    LAYERS_NOT_PRESENT                   = 137,
86#endif
87#if N0383_IL_CONSTRAINED_TILE_SETS_SEI
88    INTER_LAYER_CONSTRAINED_TILE_SETS    = 138,
89#endif
90#if SUB_BITSTREAM_PROPERTY_SEI
91    SUB_BITSTREAM_PROPERTY               = 139,    // Final PayloadType to be defined after finalization
92#endif
93#if O0164_MULTI_LAYER_HRD
94    BSP_NESTING                          = 140,
95    BSP_INITIAL_ARRIVAL_TIME             = 141,
96#if !REMOVE_BSP_HRD_SEI
97    BSP_HRD                              = 142,
98#endif
99#endif
100#if Q0074_COLOUR_REMAPPING_SEI
101    COLOUR_REMAPPING_INFO                = 143,
102#endif
103#if Q0078_ADD_LAYER_SETS
104    OUTPUT_LAYER_SET_NESTING             = 144,
105    VPS_REWRITING                        = 145,
106#endif
107#if Q0189_TMVP_CONSTRAINTS
108    TMVP_CONSTRAINTS                     = 146,
109#endif
110#if Q0247_FRAME_FIELD_INFO
111    FRAME_FIELD_INFO                     = 147,
112#endif
113  };
114 
115  SEI() {}
116  virtual ~SEI() {}
117 
118  virtual PayloadType payloadType() const = 0;
119};
120
121class SEIuserDataUnregistered : public SEI
122{
123public:
124  PayloadType payloadType() const { return USER_DATA_UNREGISTERED; }
125
126  SEIuserDataUnregistered()
127    : userData(0)
128    {}
129
130  virtual ~SEIuserDataUnregistered()
131  {
132    delete userData;
133  }
134
135  UChar uuid_iso_iec_11578[16];
136  UInt userDataLength;
137  UChar *userData;
138};
139
140class SEIDecodedPictureHash : public SEI
141{
142public:
143  PayloadType payloadType() const { return DECODED_PICTURE_HASH; }
144
145  SEIDecodedPictureHash() {}
146  virtual ~SEIDecodedPictureHash() {}
147 
148  enum Method
149  {
150    MD5,
151    CRC,
152    CHECKSUM,
153    RESERVED,
154  } method;
155
156  UChar digest[3][16];
157};
158
159class SEIActiveParameterSets : public SEI
160{
161public:
162  PayloadType payloadType() const { return ACTIVE_PARAMETER_SETS; }
163
164  SEIActiveParameterSets() 
165    : activeVPSId            (0)
166    , m_selfContainedCvsFlag (false)
167    , m_noParameterSetUpdateFlag (false)
168    , numSpsIdsMinus1        (0)
169  {}
170  virtual ~SEIActiveParameterSets() {}
171
172  Int activeVPSId; 
173  Bool m_selfContainedCvsFlag;
174  Bool m_noParameterSetUpdateFlag;
175  Int numSpsIdsMinus1;
176  std::vector<Int> activeSeqParameterSetId; 
177};
178
179class SEIBufferingPeriod : public SEI
180{
181public:
182  PayloadType payloadType() const { return BUFFERING_PERIOD; }
183
184  SEIBufferingPeriod()
185  : m_bpSeqParameterSetId (0)
186  , m_rapCpbParamsPresentFlag (false)
187  , m_cpbDelayOffset      (0)
188  , m_dpbDelayOffset      (0)
189#if P0138_USE_ALT_CPB_PARAMS_FLAG
190  , m_useAltCpbParamsFlagPresent(false)
191  , m_useAltCpbParamsFlag (false)
192#endif
193  {
194    ::memset(m_initialCpbRemovalDelay, 0, sizeof(m_initialCpbRemovalDelay));
195    ::memset(m_initialCpbRemovalDelayOffset, 0, sizeof(m_initialCpbRemovalDelayOffset));
196    ::memset(m_initialAltCpbRemovalDelay, 0, sizeof(m_initialAltCpbRemovalDelay));
197    ::memset(m_initialAltCpbRemovalDelayOffset, 0, sizeof(m_initialAltCpbRemovalDelayOffset));
198  }
199  virtual ~SEIBufferingPeriod() {}
200
201  UInt m_bpSeqParameterSetId;
202  Bool m_rapCpbParamsPresentFlag;
203  UInt m_cpbDelayOffset;
204  UInt m_dpbDelayOffset;
205  UInt m_initialCpbRemovalDelay         [MAX_CPB_CNT][2];
206  UInt m_initialCpbRemovalDelayOffset   [MAX_CPB_CNT][2];
207  UInt m_initialAltCpbRemovalDelay      [MAX_CPB_CNT][2];
208  UInt m_initialAltCpbRemovalDelayOffset[MAX_CPB_CNT][2];
209  Bool m_concatenationFlag;
210  UInt m_auCpbRemovalDelayDelta;
211#if P0138_USE_ALT_CPB_PARAMS_FLAG
212  Bool m_useAltCpbParamsFlagPresent;
213  Bool m_useAltCpbParamsFlag;
214#endif
215};
216class SEIPictureTiming : public SEI
217{
218public:
219  PayloadType payloadType() const { return PICTURE_TIMING; }
220
221  SEIPictureTiming()
222  : m_picStruct               (0)
223  , m_sourceScanType          (0)
224  , m_duplicateFlag           (false)
225  , m_picDpbOutputDuDelay     (0)
226  , m_numNalusInDuMinus1      (NULL)
227  , m_duCpbRemovalDelayMinus1 (NULL)
228  {}
229  virtual ~SEIPictureTiming()
230  {
231    if( m_numNalusInDuMinus1 != NULL )
232    {
233      delete m_numNalusInDuMinus1;
234    }
235    if( m_duCpbRemovalDelayMinus1  != NULL )
236    {
237      delete m_duCpbRemovalDelayMinus1;
238    }
239  }
240
241  UInt  m_picStruct;
242  UInt  m_sourceScanType;
243  Bool  m_duplicateFlag;
244
245  UInt  m_auCpbRemovalDelay;
246  UInt  m_picDpbOutputDelay;
247  UInt  m_picDpbOutputDuDelay;
248  UInt  m_numDecodingUnitsMinus1;
249  Bool  m_duCommonCpbRemovalDelayFlag;
250  UInt  m_duCommonCpbRemovalDelayMinus1;
251  UInt* m_numNalusInDuMinus1;
252  UInt* m_duCpbRemovalDelayMinus1;
253};
254
255class SEIDecodingUnitInfo : public SEI
256{
257public:
258  PayloadType payloadType() const { return DECODING_UNIT_INFO; }
259
260  SEIDecodingUnitInfo()
261    : m_decodingUnitIdx(0)
262    , m_duSptCpbRemovalDelay(0)
263    , m_dpbOutputDuDelayPresentFlag(false)
264    , m_picSptDpbOutputDuDelay(0)
265  {}
266  virtual ~SEIDecodingUnitInfo() {}
267  Int m_decodingUnitIdx;
268  Int m_duSptCpbRemovalDelay;
269  Bool m_dpbOutputDuDelayPresentFlag;
270  Int m_picSptDpbOutputDuDelay;
271};
272
273class SEIRecoveryPoint : public SEI
274{
275public:
276  PayloadType payloadType() const { return RECOVERY_POINT; }
277
278  SEIRecoveryPoint() {}
279  virtual ~SEIRecoveryPoint() {}
280
281  Int  m_recoveryPocCnt;
282  Bool m_exactMatchingFlag;
283  Bool m_brokenLinkFlag;
284};
285class SEIFramePacking : public SEI
286{
287public:
288  PayloadType payloadType() const { return FRAME_PACKING; }
289
290  SEIFramePacking() {}
291  virtual ~SEIFramePacking() {}
292
293  Int  m_arrangementId;
294  Bool m_arrangementCancelFlag;
295  Int  m_arrangementType;
296  Bool m_quincunxSamplingFlag;
297  Int  m_contentInterpretationType;
298  Bool m_spatialFlippingFlag;
299  Bool m_frame0FlippedFlag;
300  Bool m_fieldViewsFlag;
301  Bool m_currentFrameIsFrame0Flag;
302  Bool m_frame0SelfContainedFlag;
303  Bool m_frame1SelfContainedFlag;
304  Int  m_frame0GridPositionX;
305  Int  m_frame0GridPositionY;
306  Int  m_frame1GridPositionX;
307  Int  m_frame1GridPositionY;
308  Int  m_arrangementReservedByte;
309  Bool m_arrangementPersistenceFlag;
310  Bool m_upsampledAspectRatio;
311};
312
313class SEIDisplayOrientation : public SEI
314{
315public:
316  PayloadType payloadType() const { return DISPLAY_ORIENTATION; }
317
318  SEIDisplayOrientation()
319    : cancelFlag(true)
320    , persistenceFlag(0)
321    , extensionFlag(false)
322    {}
323  virtual ~SEIDisplayOrientation() {}
324
325  Bool cancelFlag;
326  Bool horFlip;
327  Bool verFlip;
328
329  UInt anticlockwiseRotation;
330  Bool persistenceFlag;
331  Bool extensionFlag;
332};
333
334class SEITemporalLevel0Index : public SEI
335{
336public:
337  PayloadType payloadType() const { return TEMPORAL_LEVEL0_INDEX; }
338
339  SEITemporalLevel0Index()
340    : tl0Idx(0)
341    , rapIdx(0)
342    {}
343  virtual ~SEITemporalLevel0Index() {}
344
345  UInt tl0Idx;
346  UInt rapIdx;
347};
348
349class SEIGradualDecodingRefreshInfo : public SEI
350{
351public:
352  PayloadType payloadType() const { return REGION_REFRESH_INFO; }
353
354  SEIGradualDecodingRefreshInfo()
355    : m_gdrForegroundFlag(0)
356  {}
357  virtual ~SEIGradualDecodingRefreshInfo() {}
358
359  Bool m_gdrForegroundFlag;
360};
361
362#if LAYERS_NOT_PRESENT_SEI
363class SEILayersNotPresent : public SEI
364{
365public:
366  PayloadType payloadType() const { return LAYERS_NOT_PRESENT; }
367
368  SEILayersNotPresent() {}
369  virtual ~SEILayersNotPresent() {}
370
371  UInt m_activeVpsId;
372  UInt m_vpsMaxLayers;
373  Bool m_layerNotPresentFlag[MAX_LAYERS];
374};
375#endif
376
377class SEISOPDescription : public SEI
378{
379public:
380  PayloadType payloadType() const { return SOP_DESCRIPTION; }
381
382  SEISOPDescription() {}
383  virtual ~SEISOPDescription() {}
384
385  UInt m_sopSeqParameterSetId;
386  UInt m_numPicsInSopMinus1;
387
388  UInt m_sopDescVclNaluType[MAX_NUM_PICS_IN_SOP];
389  UInt m_sopDescTemporalId[MAX_NUM_PICS_IN_SOP];
390  UInt m_sopDescStRpsIdx[MAX_NUM_PICS_IN_SOP];
391  Int m_sopDescPocDelta[MAX_NUM_PICS_IN_SOP];
392};
393
394class SEIToneMappingInfo : public SEI
395{
396public:
397  PayloadType payloadType() const { return TONE_MAPPING_INFO; }
398  SEIToneMappingInfo() {}
399  virtual ~SEIToneMappingInfo() {}
400
401  Int    m_toneMapId;
402  Bool   m_toneMapCancelFlag;
403  Bool   m_toneMapPersistenceFlag;
404  Int    m_codedDataBitDepth;
405  Int    m_targetBitDepth;
406  Int    m_modelId;
407  Int    m_minValue;
408  Int    m_maxValue;
409  Int    m_sigmoidMidpoint;
410  Int    m_sigmoidWidth;
411  std::vector<Int> m_startOfCodedInterval;
412  Int    m_numPivots;
413  std::vector<Int> m_codedPivotValue;
414  std::vector<Int> m_targetPivotValue;
415  Int    m_cameraIsoSpeedIdc;
416  Int    m_cameraIsoSpeedValue;
417  Int    m_exposureIndexIdc;
418  Int    m_exposureIndexValue;
419  Int    m_exposureCompensationValueSignFlag;
420  Int    m_exposureCompensationValueNumerator;
421  Int    m_exposureCompensationValueDenomIdc;
422  Int    m_refScreenLuminanceWhite;
423  Int    m_extendedRangeWhiteLevel;
424  Int    m_nominalBlackLevelLumaCodeValue;
425  Int    m_nominalWhiteLevelLumaCodeValue;
426  Int    m_extendedWhiteLevelLumaCodeValue;
427};
428#if P0050_KNEE_FUNCTION_SEI
429class SEIKneeFunctionInfo : public SEI
430{
431public:
432  PayloadType payloadType() const { return KNEE_FUNCTION_INFO; }
433  SEIKneeFunctionInfo() {}
434  virtual ~SEIKneeFunctionInfo() {}
435
436  Int   m_kneeId;
437  Bool  m_kneeCancelFlag;
438  Bool  m_kneePersistenceFlag;
439  Bool  m_kneeMappingFlag;
440  Int   m_kneeInputDrange;
441  Int   m_kneeInputDispLuminance;
442  Int   m_kneeOutputDrange;
443  Int   m_kneeOutputDispLuminance;
444  Int   m_kneeNumKneePointsMinus1;
445  std::vector<Int> m_kneeInputKneePoint;
446  std::vector<Int> m_kneeOutputKneePoint;
447};
448#endif
449#if Q0074_COLOUR_REMAPPING_SEI
450class SEIColourRemappingInfo : public SEI
451{
452public:
453  PayloadType payloadType() const { return COLOUR_REMAPPING_INFO; }
454  SEIColourRemappingInfo() {}
455  ~SEIColourRemappingInfo() {}
456 
457  Int   m_colourRemapId;
458  Bool  m_colourRemapCancelFlag;
459  Bool  m_colourRemapPersistenceFlag;
460  Bool  m_colourRemapVideoSignalTypePresentFlag;
461  Bool  m_colourRemapVideoFullRangeFlag;
462  Int   m_colourRemapPrimaries;
463  Int   m_colourRemapTransferCharacteristics;
464  Int   m_colourRemapMatrixCoeffs;
465  Int   m_colourRemapCodedDataBitDepth;
466  Int   m_colourRemapTargetBitDepth;
467  Int   m_preLutNumValMinus1[3];
468  std::vector<Int> m_preLutCodedValue[3];
469  std::vector<Int> m_preLutTargetValue[3];
470  Bool  m_colourRemapMatrixPresentFlag;
471  Int   m_log2MatrixDenom;
472  Int   m_colourRemapCoeffs[3][3];
473  Int   m_postLutNumValMinus1[3];
474  std::vector<Int> m_postLutCodedValue[3];
475  std::vector<Int> m_postLutTargetValue[3];
476};
477#endif
478
479#if N0383_IL_CONSTRAINED_TILE_SETS_SEI
480class SEIInterLayerConstrainedTileSets : public SEI
481{
482public:
483  PayloadType payloadType() const { return INTER_LAYER_CONSTRAINED_TILE_SETS; }
484
485  SEIInterLayerConstrainedTileSets() {}
486  virtual ~SEIInterLayerConstrainedTileSets() {}
487
488  Bool m_ilAllTilesExactSampleValueMatchFlag;
489  Bool m_ilOneTilePerTileSetFlag;
490  UInt m_ilNumSetsInMessageMinus1;
491  Bool m_skippedTileSetPresentFlag;
492  UInt m_ilctsId[256];
493  UInt m_ilNumTileRectsInSetMinus1[256];
494  UInt m_ilTopLeftTileIndex[256][440];
495  UInt m_ilBottomRightTileIndex[256][440];
496  UInt m_ilcIdc[256];
497  Bool m_ilExactSampleValueMatchFlag[256];
498  UInt m_allTilesIlcIdc;
499};
500#endif
501
502#if SUB_BITSTREAM_PROPERTY_SEI
503class SEISubBitstreamProperty : public SEI
504{
505public:
506  PayloadType payloadType() const { return SUB_BITSTREAM_PROPERTY; }
507
508  SEISubBitstreamProperty();
509  virtual ~SEISubBitstreamProperty() {}
510
511  Int  m_activeVpsId;
512  Int  m_numAdditionalSubStreams;
513  Int  m_subBitstreamMode       [MAX_SUB_STREAMS];
514  Int  m_outputLayerSetIdxToVps [MAX_SUB_STREAMS];
515  Int  m_highestSublayerId      [MAX_SUB_STREAMS];
516  Int  m_avgBitRate             [MAX_SUB_STREAMS];
517  Int  m_maxBitRate             [MAX_SUB_STREAMS];
518};
519#endif
520
521#if Q0189_TMVP_CONSTRAINTS
522class SEITMVPConstrains : public SEI
523{
524public:
525  PayloadType payloadType() const { return TMVP_CONSTRAINTS; }
526
527  SEITMVPConstrains()
528    : prev_pics_not_used_flag(0),no_intra_layer_col_pic_flag(0)
529    {}
530
531  virtual ~SEITMVPConstrains()
532  {
533  }
534
535  UInt prev_pics_not_used_flag;
536  UInt no_intra_layer_col_pic_flag;
537};
538#endif
539
540#if Q0247_FRAME_FIELD_INFO
541class SEIFrameFieldInfo: public SEI
542{
543public:
544  PayloadType payloadType() const { return FRAME_FIELD_INFO; }
545
546  SEIFrameFieldInfo()
547    : m_ffinfo_picStruct(0),m_ffinfo_sourceScanType(0), m_ffinfo_duplicateFlag(false)
548    {}
549
550  virtual ~SEIFrameFieldInfo()
551  {
552  }
553
554  UInt  m_ffinfo_picStruct;
555  UInt  m_ffinfo_sourceScanType;
556  Bool  m_ffinfo_duplicateFlag;
557};
558
559#endif
560
561typedef std::list<SEI*> SEIMessages;
562
563/// output a selection of SEI messages by payload type. Ownership stays in original message list.
564SEIMessages getSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
565
566/// remove a selection of SEI messages by payload type from the original list and return them in a new list.
567SEIMessages extractSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
568
569/// delete list of SEI messages (freeing the referenced objects)
570Void deleteSEIs (SEIMessages &seiList);
571
572#if O0164_MULTI_LAYER_HRD
573
574class SEIBspNesting : public SEI
575{
576public:
577  PayloadType payloadType() const { return BSP_NESTING; }
578
579  SEIBspNesting() {}
580  virtual ~SEIBspNesting()
581  {
582    if (!m_callerOwnsSEIs)
583    {
584      deleteSEIs(m_nestedSEIs);
585    }
586  }
587
588  Int  m_bspIdx;
589  Bool  m_callerOwnsSEIs;
590  SEIMessages m_nestedSEIs;
591};
592
593class SEIBspInitialArrivalTime : public SEI
594{
595public:
596  PayloadType payloadType() const { return BSP_INITIAL_ARRIVAL_TIME; }
597
598  SEIBspInitialArrivalTime () {}
599  virtual ~SEIBspInitialArrivalTime () {}
600
601  UInt m_nalInitialArrivalDelay[256];
602  UInt m_vclInitialArrivalDelay[256];
603};
604
605#if !REMOVE_BSP_HRD_SEI
606class SEIBspHrd : public SEI
607{
608public:
609  PayloadType payloadType() const { return BSP_HRD; }
610
611  SEIBspHrd () {}
612  virtual ~SEIBspHrd () {}
613
614  UInt m_seiNumBspHrdParametersMinus1;
615  Bool m_seiBspCprmsPresentFlag[MAX_VPS_LAYER_SETS_PLUS1];
616  UInt m_seiNumBitstreamPartitionsMinus1[MAX_VPS_LAYER_SETS_PLUS1];
617  Bool m_seiLayerInBspFlag[MAX_VPS_LAYER_SETS_PLUS1][8][MAX_LAYERS];
618  UInt m_seiNumBspSchedCombinationsMinus1[MAX_VPS_LAYER_SETS_PLUS1];
619  UInt m_seiBspCombHrdIdx[MAX_VPS_LAYER_SETS_PLUS1][16][16];
620  UInt m_seiBspCombScheddx[MAX_VPS_LAYER_SETS_PLUS1][16][16];
621  UInt m_vpsMaxLayers;
622  Bool m_layerIdIncludedFlag[MAX_VPS_LAYER_SETS_PLUS1][MAX_VPS_LAYER_ID_PLUS1];
623
624  TComHRD *hrd;
625};
626#endif
627
628#endif
629
630class SEIScalableNesting : public SEI
631{
632public:
633  PayloadType payloadType() const { return SCALABLE_NESTING; }
634
635  SEIScalableNesting() {}
636  virtual ~SEIScalableNesting()
637  {
638    if (!m_callerOwnsSEIs)
639    {
640      deleteSEIs(m_nestedSEIs);
641    }
642  }
643
644  Bool  m_bitStreamSubsetFlag;
645  Bool  m_nestingOpFlag;
646  Bool  m_defaultOpFlag;                             //value valid if m_nestingOpFlag != 0
647  UInt  m_nestingNumOpsMinus1;                       // -"-
648  UInt  m_nestingMaxTemporalIdPlus1[MAX_TLAYER];     // -"-
649  UInt  m_nestingOpIdx[MAX_NESTING_NUM_OPS];         // -"-
650
651  Bool  m_allLayersFlag;                             //value valid if m_nestingOpFlag == 0
652  UInt  m_nestingNoOpMaxTemporalIdPlus1;             //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
653  UInt  m_nestingNumLayersMinus1;                    //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
654  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 unsigned char values
655
656  Bool  m_callerOwnsSEIs;
657  SEIMessages m_nestedSEIs;
658};
659
660#if Q0078_ADD_LAYER_SETS
661class SEIOutputLayerSetNesting : public SEI
662{
663public:
664  PayloadType payloadType() const { return OUTPUT_LAYER_SET_NESTING; }
665
666  SEIOutputLayerSetNesting() {}
667  virtual ~SEIOutputLayerSetNesting()
668  {
669    if (!m_callerOwnsSEIs)
670    {
671      deleteSEIs(m_nestedSEIs);
672    }
673  }
674
675  Bool m_olsFlag;
676  UInt m_numOlsIndicesMinus1;
677  UInt m_olsIdx[1024];
678  Bool  m_callerOwnsSEIs;
679  SEIMessages m_nestedSEIs;
680};
681
682class SEIVPSRewriting : public SEI
683{
684public:
685  PayloadType payloadType() const { return VPS_REWRITING; }
686
687  SEIVPSRewriting() {}
688  virtual ~SEIVPSRewriting() {}
689
690  NALUnit* nalu;
691};
692#endif
693
694//! \}
Note: See TracBrowser for help on using the repository browser.