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

Last change on this file since 1348 was 1335, checked in by seregin, 9 years ago

port rev 4413

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