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

Last change on this file since 832 was 823, checked in by seregin, 10 years ago

update to HM-15.0

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