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

Last change on this file since 779 was 779, checked in by nokia, 11 years ago

software implementation for JCTVC-Q0189

  • Property svn:eol-style set to native
File size: 17.9 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    BSP_HRD                              = 142,
97#endif
98#if Q0074_SEI_COLOR_MAPPING
99    COLOR_MAPPING_INFO                   = 143,
100#endif
101#if Q0078_ADD_LAYER_SETS
102    OUTPUT_LAYER_SET_NESTING             = 144,
103    VPS_REWRITING                        = 145,
104#endif
105#if Q0189_TMVP_CONSTRAINTS
106    TMVP_CONSTRAINTS                     = 146,
107#endif
108  };
109 
110  SEI() {}
111  virtual ~SEI() {}
112 
113  virtual PayloadType payloadType() const = 0;
114};
115
116class SEIuserDataUnregistered : public SEI
117{
118public:
119  PayloadType payloadType() const { return USER_DATA_UNREGISTERED; }
120
121  SEIuserDataUnregistered()
122    : userData(0)
123    {}
124
125  virtual ~SEIuserDataUnregistered()
126  {
127    delete userData;
128  }
129
130  UChar uuid_iso_iec_11578[16];
131  UInt userDataLength;
132  UChar *userData;
133};
134
135class SEIDecodedPictureHash : public SEI
136{
137public:
138  PayloadType payloadType() const { return DECODED_PICTURE_HASH; }
139
140  SEIDecodedPictureHash() {}
141  virtual ~SEIDecodedPictureHash() {}
142 
143  enum Method
144  {
145    MD5,
146    CRC,
147    CHECKSUM,
148    RESERVED,
149  } method;
150
151  UChar digest[3][16];
152};
153
154class SEIActiveParameterSets : public SEI
155{
156public:
157  PayloadType payloadType() const { return ACTIVE_PARAMETER_SETS; }
158
159  SEIActiveParameterSets() 
160    : activeVPSId            (0)
161    , m_selfContainedCvsFlag (false)
162    , m_noParameterSetUpdateFlag (false)
163    , numSpsIdsMinus1        (0)
164  {}
165  virtual ~SEIActiveParameterSets() {}
166
167  Int activeVPSId; 
168  Bool m_selfContainedCvsFlag;
169  Bool m_noParameterSetUpdateFlag;
170  Int numSpsIdsMinus1;
171  std::vector<Int> activeSeqParameterSetId; 
172};
173
174class SEIBufferingPeriod : public SEI
175{
176public:
177  PayloadType payloadType() const { return BUFFERING_PERIOD; }
178
179  SEIBufferingPeriod()
180  : m_bpSeqParameterSetId (0)
181  , m_rapCpbParamsPresentFlag (false)
182  , m_cpbDelayOffset      (0)
183  , m_dpbDelayOffset      (0)
184#if P0138_USE_ALT_CPB_PARAMS_FLAG
185  , m_useAltCpbParamsFlagPresent(false)
186  , m_useAltCpbParamsFlag (false)
187#endif
188  {
189    ::memset(m_initialCpbRemovalDelay, 0, sizeof(m_initialCpbRemovalDelay));
190    ::memset(m_initialCpbRemovalDelayOffset, 0, sizeof(m_initialCpbRemovalDelayOffset));
191    ::memset(m_initialAltCpbRemovalDelay, 0, sizeof(m_initialAltCpbRemovalDelay));
192    ::memset(m_initialAltCpbRemovalDelayOffset, 0, sizeof(m_initialAltCpbRemovalDelayOffset));
193  }
194  virtual ~SEIBufferingPeriod() {}
195
196  UInt m_bpSeqParameterSetId;
197  Bool m_rapCpbParamsPresentFlag;
198  Bool m_cpbDelayOffset;
199  Bool m_dpbDelayOffset;
200  UInt m_initialCpbRemovalDelay         [MAX_CPB_CNT][2];
201  UInt m_initialCpbRemovalDelayOffset   [MAX_CPB_CNT][2];
202  UInt m_initialAltCpbRemovalDelay      [MAX_CPB_CNT][2];
203  UInt m_initialAltCpbRemovalDelayOffset[MAX_CPB_CNT][2];
204  Bool m_concatenationFlag;
205  UInt m_auCpbRemovalDelayDelta;
206#if P0138_USE_ALT_CPB_PARAMS_FLAG
207  Bool m_useAltCpbParamsFlagPresent;
208  Bool m_useAltCpbParamsFlag;
209#endif
210};
211class SEIPictureTiming : public SEI
212{
213public:
214  PayloadType payloadType() const { return PICTURE_TIMING; }
215
216  SEIPictureTiming()
217  : m_picStruct               (0)
218  , m_sourceScanType          (0)
219  , m_duplicateFlag           (false)
220  , m_picDpbOutputDuDelay     (0)
221  , m_numNalusInDuMinus1      (NULL)
222  , m_duCpbRemovalDelayMinus1 (NULL)
223  {}
224  virtual ~SEIPictureTiming()
225  {
226    if( m_numNalusInDuMinus1 != NULL )
227    {
228      delete m_numNalusInDuMinus1;
229    }
230    if( m_duCpbRemovalDelayMinus1  != NULL )
231    {
232      delete m_duCpbRemovalDelayMinus1;
233    }
234  }
235
236  UInt  m_picStruct;
237  UInt  m_sourceScanType;
238  Bool  m_duplicateFlag;
239
240  UInt  m_auCpbRemovalDelay;
241  UInt  m_picDpbOutputDelay;
242  UInt  m_picDpbOutputDuDelay;
243  UInt  m_numDecodingUnitsMinus1;
244  Bool  m_duCommonCpbRemovalDelayFlag;
245  UInt  m_duCommonCpbRemovalDelayMinus1;
246  UInt* m_numNalusInDuMinus1;
247  UInt* m_duCpbRemovalDelayMinus1;
248};
249
250class SEIDecodingUnitInfo : public SEI
251{
252public:
253  PayloadType payloadType() const { return DECODING_UNIT_INFO; }
254
255  SEIDecodingUnitInfo()
256    : m_decodingUnitIdx(0)
257    , m_duSptCpbRemovalDelay(0)
258    , m_dpbOutputDuDelayPresentFlag(false)
259    , m_picSptDpbOutputDuDelay(0)
260  {}
261  virtual ~SEIDecodingUnitInfo() {}
262  Int m_decodingUnitIdx;
263  Int m_duSptCpbRemovalDelay;
264  Bool m_dpbOutputDuDelayPresentFlag;
265  Int m_picSptDpbOutputDuDelay;
266};
267
268class SEIRecoveryPoint : public SEI
269{
270public:
271  PayloadType payloadType() const { return RECOVERY_POINT; }
272
273  SEIRecoveryPoint() {}
274  virtual ~SEIRecoveryPoint() {}
275
276  Int  m_recoveryPocCnt;
277  Bool m_exactMatchingFlag;
278  Bool m_brokenLinkFlag;
279};
280class SEIFramePacking : public SEI
281{
282public:
283  PayloadType payloadType() const { return FRAME_PACKING; }
284
285  SEIFramePacking() {}
286  virtual ~SEIFramePacking() {}
287
288  Int  m_arrangementId;
289  Bool m_arrangementCancelFlag;
290  Int  m_arrangementType;
291  Bool m_quincunxSamplingFlag;
292  Int  m_contentInterpretationType;
293  Bool m_spatialFlippingFlag;
294  Bool m_frame0FlippedFlag;
295  Bool m_fieldViewsFlag;
296  Bool m_currentFrameIsFrame0Flag;
297  Bool m_frame0SelfContainedFlag;
298  Bool m_frame1SelfContainedFlag;
299  Int  m_frame0GridPositionX;
300  Int  m_frame0GridPositionY;
301  Int  m_frame1GridPositionX;
302  Int  m_frame1GridPositionY;
303  Int  m_arrangementReservedByte;
304  Bool m_arrangementPersistenceFlag;
305  Bool m_upsampledAspectRatio;
306};
307
308class SEIDisplayOrientation : public SEI
309{
310public:
311  PayloadType payloadType() const { return DISPLAY_ORIENTATION; }
312
313  SEIDisplayOrientation()
314    : cancelFlag(true)
315    , persistenceFlag(0)
316    , extensionFlag(false)
317    {}
318  virtual ~SEIDisplayOrientation() {}
319
320  Bool cancelFlag;
321  Bool horFlip;
322  Bool verFlip;
323
324  UInt anticlockwiseRotation;
325  Bool persistenceFlag;
326  Bool extensionFlag;
327};
328
329class SEITemporalLevel0Index : public SEI
330{
331public:
332  PayloadType payloadType() const { return TEMPORAL_LEVEL0_INDEX; }
333
334  SEITemporalLevel0Index()
335    : tl0Idx(0)
336    , rapIdx(0)
337    {}
338  virtual ~SEITemporalLevel0Index() {}
339
340  UInt tl0Idx;
341  UInt rapIdx;
342};
343
344class SEIGradualDecodingRefreshInfo : public SEI
345{
346public:
347  PayloadType payloadType() const { return REGION_REFRESH_INFO; }
348
349  SEIGradualDecodingRefreshInfo()
350    : m_gdrForegroundFlag(0)
351  {}
352  virtual ~SEIGradualDecodingRefreshInfo() {}
353
354  Bool m_gdrForegroundFlag;
355};
356
357#if LAYERS_NOT_PRESENT_SEI
358class SEILayersNotPresent : public SEI
359{
360public:
361  PayloadType payloadType() const { return LAYERS_NOT_PRESENT; }
362
363  SEILayersNotPresent() {}
364  virtual ~SEILayersNotPresent() {}
365
366  UInt m_activeVpsId;
367  UInt m_vpsMaxLayers;
368  Bool m_layerNotPresentFlag[MAX_LAYERS];
369};
370#endif
371
372class SEISOPDescription : public SEI
373{
374public:
375  PayloadType payloadType() const { return SOP_DESCRIPTION; }
376
377  SEISOPDescription() {}
378  virtual ~SEISOPDescription() {}
379
380  UInt m_sopSeqParameterSetId;
381  UInt m_numPicsInSopMinus1;
382
383  UInt m_sopDescVclNaluType[MAX_NUM_PICS_IN_SOP];
384  UInt m_sopDescTemporalId[MAX_NUM_PICS_IN_SOP];
385  UInt m_sopDescStRpsIdx[MAX_NUM_PICS_IN_SOP];
386  Int m_sopDescPocDelta[MAX_NUM_PICS_IN_SOP];
387};
388
389class SEIToneMappingInfo : public SEI
390{
391public:
392  PayloadType payloadType() const { return TONE_MAPPING_INFO; }
393  SEIToneMappingInfo() {}
394  virtual ~SEIToneMappingInfo() {}
395
396  Int    m_toneMapId;
397  Bool   m_toneMapCancelFlag;
398  Bool   m_toneMapPersistenceFlag;
399  Int    m_codedDataBitDepth;
400  Int    m_targetBitDepth;
401  Int    m_modelId;
402  Int    m_minValue;
403  Int    m_maxValue;
404  Int    m_sigmoidMidpoint;
405  Int    m_sigmoidWidth;
406  std::vector<Int> m_startOfCodedInterval;
407  Int    m_numPivots;
408  std::vector<Int> m_codedPivotValue;
409  std::vector<Int> m_targetPivotValue;
410  Int    m_cameraIsoSpeedIdc;
411  Int    m_cameraIsoSpeedValue;
412  Int    m_exposureIndexIdc;
413  Int    m_exposureIndexValue;
414  Int    m_exposureCompensationValueSignFlag;
415  Int    m_exposureCompensationValueNumerator;
416  Int    m_exposureCompensationValueDenomIdc;
417  Int    m_refScreenLuminanceWhite;
418  Int    m_extendedRangeWhiteLevel;
419  Int    m_nominalBlackLevelLumaCodeValue;
420  Int    m_nominalWhiteLevelLumaCodeValue;
421  Int    m_extendedWhiteLevelLumaCodeValue;
422};
423#if P0050_KNEE_FUNCTION_SEI
424class SEIKneeFunctionInfo : public SEI
425{
426public:
427  PayloadType payloadType() const { return KNEE_FUNCTION_INFO; }
428  SEIKneeFunctionInfo() {}
429  virtual ~SEIKneeFunctionInfo() {}
430
431  Int   m_kneeId;
432  Bool  m_kneeCancelFlag;
433  Bool  m_kneePersistenceFlag;
434  Bool  m_kneeMappingFlag;
435  Int   m_kneeInputDrange;
436  Int   m_kneeInputDispLuminance;
437  Int   m_kneeOutputDrange;
438  Int   m_kneeOutputDispLuminance;
439  Int   m_kneeNumKneePointsMinus1;
440  std::vector<Int> m_kneeInputKneePoint;
441  std::vector<Int> m_kneeOutputKneePoint;
442};
443#endif
444#if Q0074_SEI_COLOR_MAPPING
445class SEIColorMappingInfo : public SEI
446{
447public:
448  PayloadType payloadType() const { return COLOR_MAPPING_INFO; }
449  SEIColorMappingInfo() {
450  }
451  virtual ~SEIColorMappingInfo() {}
452
453  Int   m_colorMapId;
454  Bool  m_colorMapCancelFlag;
455  Bool  m_colorMapPersistenceFlag;
456  Bool  m_colorMap_video_signal_type_present_flag;
457  Bool  m_colorMap_video_full_range_flag;
458  Int   m_colorMap_primaries;
459  Int   m_colorMap_transfer_characteristics;
460  Int   m_colorMap_matrix_coeffs;
461  Int   m_colorMapModelId;
462
463  Int   m_colour_map_coded_data_bit_depth;
464  Int   m_colour_map_target_bit_depth;
465
466  Int   m_num_input_pivots[3];
467  Int*  m_coded_input_pivot_value[3];
468  Int*  m_target_input_pivot_value[3];
469 
470  Bool  m_matrix_flag;
471  Int   m_log2_matrix_denom;
472  Int   m_matrix_coef[3][3];
473
474  Int   m_num_output_pivots[3];
475  Int*  m_coded_output_pivot_value[3];
476  Int*  m_target_output_pivot_value[3];
477};
478#endif
479
480#if N0383_IL_CONSTRAINED_TILE_SETS_SEI
481class SEIInterLayerConstrainedTileSets : public SEI
482{
483public:
484  PayloadType payloadType() const { return INTER_LAYER_CONSTRAINED_TILE_SETS; }
485
486  SEIInterLayerConstrainedTileSets() {}
487  virtual ~SEIInterLayerConstrainedTileSets() {}
488
489  Bool m_ilAllTilesExactSampleValueMatchFlag;
490  Bool m_ilOneTilePerTileSetFlag;
491  UInt m_ilNumSetsInMessageMinus1;
492  Bool m_skippedTileSetPresentFlag;
493  UInt m_ilctsId[256];
494  UInt m_ilNumTileRectsInSetMinus1[256];
495  UInt m_ilTopLeftTileIndex[256][440];
496  UInt m_ilBottomRightTileIndex[256][440];
497  UInt m_ilcIdc[256];
498  Bool m_ilExactSampleValueMatchFlag[256];
499  UInt m_allTilesIlcIdc;
500};
501#endif
502
503#if SUB_BITSTREAM_PROPERTY_SEI
504class SEISubBitstreamProperty : public SEI
505{
506public:
507  PayloadType payloadType() const { return SUB_BITSTREAM_PROPERTY; }
508
509  SEISubBitstreamProperty();
510  virtual ~SEISubBitstreamProperty() {}
511
512  Int  m_activeVpsId;
513  Int  m_numAdditionalSubStreams;
514  Int  m_subBitstreamMode       [MAX_SUB_STREAMS];
515  Int  m_outputLayerSetIdxToVps [MAX_SUB_STREAMS];
516  Int  m_highestSublayerId      [MAX_SUB_STREAMS];
517  Int  m_avgBitRate             [MAX_SUB_STREAMS];
518  Int  m_maxBitRate             [MAX_SUB_STREAMS];
519};
520#endif
521
522#if Q0189_TMVP_CONSTRAINTS
523class SEITMVPConstrains : public SEI
524{
525public:
526  PayloadType payloadType() const { return TMVP_CONSTRAINTS; }
527
528  SEITMVPConstrains()
529    : prev_pics_not_used_flag(0),no_intra_layer_col_pic_flag(0)
530    {}
531
532  virtual ~SEITMVPConstrains()
533  {
534  }
535
536  UInt prev_pics_not_used_flag;
537  UInt no_intra_layer_col_pic_flag;
538};
539#endif
540
541typedef std::list<SEI*> SEIMessages;
542
543/// output a selection of SEI messages by payload type. Ownership stays in original message list.
544SEIMessages getSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
545
546/// remove a selection of SEI messages by payload type from the original list and return them in a new list.
547SEIMessages extractSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
548
549/// delete list of SEI messages (freeing the referenced objects)
550Void deleteSEIs (SEIMessages &seiList);
551
552#if O0164_MULTI_LAYER_HRD
553
554class SEIBspNesting : public SEI
555{
556public:
557  PayloadType payloadType() const { return BSP_NESTING; }
558
559  SEIBspNesting() {}
560  virtual ~SEIBspNesting()
561  {
562    if (!m_callerOwnsSEIs)
563    {
564      deleteSEIs(m_nestedSEIs);
565    }
566  }
567
568  Int  m_bspIdx;
569  Bool  m_callerOwnsSEIs;
570  SEIMessages m_nestedSEIs;
571};
572
573class SEIBspInitialArrivalTime : public SEI
574{
575public:
576  PayloadType payloadType() const { return BSP_INITIAL_ARRIVAL_TIME; }
577
578  SEIBspInitialArrivalTime () {}
579  virtual ~SEIBspInitialArrivalTime () {}
580
581  UInt m_nalInitialArrivalDelay[256];
582  UInt m_vclInitialArrivalDelay[256];
583};
584
585class SEIBspHrd : public SEI
586{
587public:
588  PayloadType payloadType() const { return BSP_HRD; }
589
590  SEIBspHrd () {}
591  virtual ~SEIBspHrd () {}
592
593  UInt m_seiNumBspHrdParametersMinus1;
594  Bool m_seiBspCprmsPresentFlag[MAX_VPS_LAYER_SETS_PLUS1];
595  UInt m_seiNumBitstreamPartitionsMinus1[MAX_VPS_LAYER_SETS_PLUS1];
596  Bool m_seiLayerInBspFlag[MAX_VPS_LAYER_SETS_PLUS1][8][MAX_LAYERS];
597  UInt m_seiNumBspSchedCombinationsMinus1[MAX_VPS_LAYER_SETS_PLUS1];
598  UInt m_seiBspCombHrdIdx[MAX_VPS_LAYER_SETS_PLUS1][16][16];
599  UInt m_seiBspCombScheddx[MAX_VPS_LAYER_SETS_PLUS1][16][16];
600  UInt m_vpsMaxLayers;
601  Bool m_layerIdIncludedFlag[MAX_VPS_LAYER_SETS_PLUS1][MAX_VPS_LAYER_ID_PLUS1];
602
603  TComHRD *hrd;
604};
605
606#endif
607
608class SEIScalableNesting : public SEI
609{
610public:
611  PayloadType payloadType() const { return SCALABLE_NESTING; }
612
613  SEIScalableNesting() {}
614  virtual ~SEIScalableNesting()
615  {
616    if (!m_callerOwnsSEIs)
617    {
618      deleteSEIs(m_nestedSEIs);
619    }
620  }
621
622  Bool  m_bitStreamSubsetFlag;
623  Bool  m_nestingOpFlag;
624  Bool  m_defaultOpFlag;                             //value valid if m_nestingOpFlag != 0
625  UInt  m_nestingNumOpsMinus1;                       // -"-
626  UInt  m_nestingMaxTemporalIdPlus1[MAX_TLAYER];     // -"-
627  UInt  m_nestingOpIdx[MAX_NESTING_NUM_OPS];         // -"-
628
629  Bool  m_allLayersFlag;                             //value valid if m_nestingOpFlag == 0
630  UInt  m_nestingNoOpMaxTemporalIdPlus1;             //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
631  UInt  m_nestingNumLayersMinus1;                    //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
632  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
633
634  Bool  m_callerOwnsSEIs;
635  SEIMessages m_nestedSEIs;
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//! \}
Note: See TracBrowser for help on using the repository browser.