source: 3DVCSoftware/branches/HTM-15.2-dev/source/Lib/TLibCommon/SEI.h @ 1362

Last change on this file since 1362 was 1362, checked in by tech, 9 years ago

Align macros

  • Property svn:eol-style set to native
File size: 42.2 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
45
46#if NH_MV_SEI
47#include "TAppCommon/program_options_lite.h"
48using namespace std;
49namespace po = df::program_options_lite;
50#endif
51
52//! \ingroup TLibCommon
53//! \{
54class TComSPS;
55#if NH_MV_SEI
56class TComSlice;
57class SEIScalableNesting;
58#endif
59
60/**
61 * Abstract class representing an SEI message with lightweight RTTI.
62 */
63class SEI
64{
65public:
66  enum PayloadType
67  {
68    BUFFERING_PERIOD                     = 0,
69    PICTURE_TIMING                       = 1,
70    PAN_SCAN_RECT                        = 2,
71    FILLER_PAYLOAD                       = 3,
72    USER_DATA_REGISTERED_ITU_T_T35       = 4,
73    USER_DATA_UNREGISTERED               = 5,
74    RECOVERY_POINT                       = 6,
75    SCENE_INFO                           = 9,
76    FULL_FRAME_SNAPSHOT                  = 15,
77    PROGRESSIVE_REFINEMENT_SEGMENT_START = 16,
78    PROGRESSIVE_REFINEMENT_SEGMENT_END   = 17,
79    FILM_GRAIN_CHARACTERISTICS           = 19,
80    POST_FILTER_HINT                     = 22,
81    TONE_MAPPING_INFO                    = 23,
82    FRAME_PACKING                        = 45,
83    DISPLAY_ORIENTATION                  = 47,
84    SOP_DESCRIPTION                      = 128,
85    ACTIVE_PARAMETER_SETS                = 129,
86    DECODING_UNIT_INFO                   = 130,
87    TEMPORAL_LEVEL0_INDEX                = 131,
88    DECODED_PICTURE_HASH                 = 132,
89    SCALABLE_NESTING                     = 133,
90    REGION_REFRESH_INFO                  = 134,
91    NO_DISPLAY                           = 135,
92    TIME_CODE                            = 136,
93    MASTERING_DISPLAY_COLOUR_VOLUME      = 137,
94    SEGM_RECT_FRAME_PACKING              = 138,
95    TEMP_MOTION_CONSTRAINED_TILE_SETS    = 139,
96    CHROMA_RESAMPLING_FILTER_HINT        = 140,
97    KNEE_FUNCTION_INFO                   = 141,
98    COLOUR_REMAPPING_INFO                = 142,
99#if NH_MV_SEI
100    DEINTERLACED_FIELD_IDENTIFICATION         = 143,
101    LAYERS_NOT_PRESENT                        = 160,
102    INTER_LAYER_CONSTRAINED_TILE_SETS         = 161,
103    BSP_NESTING                               = 162,
104    BSP_INITIAL_ARRIVAL_TIME                  = 163,
105    SUB_BITSTREAM_PROPERTY                    = 164,
106    ALPHA_CHANNEL_INFO                        = 165,
107    OVERLAY_INFO                              = 166,
108    TEMPORAL_MV_PREDICTION_CONSTRAINTS        = 167,
109    FRAME_FIELD_INFO                          = 168,
110    THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO = 176,
111    DEPTH_REPRESENTATION_INFO                 = 177,
112    MULTIVIEW_SCENE_INFO                      = 178,
113    MULTIVIEW_ACQUISITION_INFO                = 179,
114    MULTIVIEW_VIEW_POSITION                   = 180
115#if NH_3D
116    ,ALTERNATIVE_DEPTH_INFO                    = 181
117#endif
118#endif
119
120  };
121
122#if NH_MV
123  SEI();
124#else
125  SEI() {}
126#endif
127
128
129  virtual ~SEI() {}
130
131  static const TChar *getSEIMessageString(SEI::PayloadType payloadType);
132
133  virtual PayloadType payloadType() const = 0;
134
135#if NH_MV_SEI
136  virtual SEI*       getCopy( ) const;
137  static SEI*        getNewSEIMessage         ( SEI::PayloadType payloadType );
138  Bool               insertSei                ( Int curLayerId, Int curPoc, Int curTid, Int curNaluType ) const;
139
140
141  virtual Void       setupFromSlice           ( const TComSlice* slice );
142  virtual Void       setupFromCfgFile         ( const TChar*   cfgFile );
143  virtual Bool       checkCfg                 ( const TComSlice* slice   );
144
145  Void               xPrintCfgErrorIntro();
146  Void               xCheckCfgRange           ( Bool& wrongConfig, Int val, Int minVal, Int maxVal, const TChar* seName );
147  Void               xCheckCfg                ( Bool& wrongConfig, Bool cond, const TChar* errStr );
148  Void               xAddGeneralOpts          ( po::Options &opts, IntAry1d defAppLayerIds, IntAry1d defAppPocs, IntAry1d defAppTids, IntAry1d defAppVclNaluTypes,
149                                                Int defSeiNaluId, Int defPositionInSeiNalu, Bool defModifyByEncoder );
150    // Filters where to insert SEI in the bitstream.
151  // When the respected vector is empty, all layersIds, POCs, Tids, and Nalu types are used.
152  IntAry1d                       m_applicableLayerIds;
153  IntAry1d                       m_applicablePocs;
154  IntAry1d                       m_applicableTids;
155  IntAry1d                       m_applicableVclNaluTypes;
156
157  Int                            m_payloadType;              // Payload type
158  Int                            m_seiNaluId;                // Identifies to which NAL unit  the SEI is added.
159  Int                            m_positionInSeiNalu;        // Identifies the order within the NAL unit
160  Bool                           m_modifyByEncoder;          // Don't use the SEI cfg-file, but let let the encoder setup the NALU.
161
162  SEIScalableNesting*            m_scalNestSeiContThisSei;   // Pointer to scalable nesting SEI containing the SEI. When NULL, the SEI is not nested.
163#endif
164};
165
166static const UInt ISO_IEC_11578_LEN=16;
167
168class SEIuserDataUnregistered : public SEI
169{
170public:
171  PayloadType payloadType() const { return USER_DATA_UNREGISTERED; }
172
173  SEIuserDataUnregistered()
174    : userData(0)
175    {}
176
177  virtual ~SEIuserDataUnregistered()
178  {
179    delete userData;
180  }
181
182  UChar uuid_iso_iec_11578[ISO_IEC_11578_LEN];
183  UInt  userDataLength;
184  UChar *userData;
185};
186
187class SEIDecodedPictureHash : public SEI
188{
189public:
190  PayloadType payloadType() const { return DECODED_PICTURE_HASH; }
191
192  SEIDecodedPictureHash() {}
193  virtual ~SEIDecodedPictureHash() {}
194
195  HashType method;
196
197  TComPictureHash m_pictureHash;
198};
199
200class SEIActiveParameterSets : public SEI
201{
202public:
203  PayloadType payloadType() const { return ACTIVE_PARAMETER_SETS; }
204
205  SEIActiveParameterSets()
206    : activeVPSId            (0)
207    , m_selfContainedCvsFlag (false)
208    , m_noParameterSetUpdateFlag (false)
209    , numSpsIdsMinus1        (0)
210  {}
211  virtual ~SEIActiveParameterSets() {}
212
213  Int activeVPSId;
214  Bool m_selfContainedCvsFlag;
215  Bool m_noParameterSetUpdateFlag;
216  Int numSpsIdsMinus1;
217  std::vector<Int> activeSeqParameterSetId;
218};
219
220class SEIBufferingPeriod : public SEI
221{
222public:
223  PayloadType payloadType() const { return BUFFERING_PERIOD; }
224  void copyTo (SEIBufferingPeriod& target);
225
226  SEIBufferingPeriod()
227  : m_bpSeqParameterSetId (0)
228  , m_rapCpbParamsPresentFlag (false)
229  , m_cpbDelayOffset      (0)
230  , m_dpbDelayOffset      (0)
231  {
232    ::memset(m_initialCpbRemovalDelay, 0, sizeof(m_initialCpbRemovalDelay));
233    ::memset(m_initialCpbRemovalDelayOffset, 0, sizeof(m_initialCpbRemovalDelayOffset));
234    ::memset(m_initialAltCpbRemovalDelay, 0, sizeof(m_initialAltCpbRemovalDelay));
235    ::memset(m_initialAltCpbRemovalDelayOffset, 0, sizeof(m_initialAltCpbRemovalDelayOffset));
236  }
237  virtual ~SEIBufferingPeriod() {}
238
239  UInt m_bpSeqParameterSetId;
240  Bool m_rapCpbParamsPresentFlag;
241  UInt m_cpbDelayOffset;
242  UInt m_dpbDelayOffset;
243  UInt m_initialCpbRemovalDelay         [MAX_CPB_CNT][2];
244  UInt m_initialCpbRemovalDelayOffset   [MAX_CPB_CNT][2];
245  UInt m_initialAltCpbRemovalDelay      [MAX_CPB_CNT][2];
246  UInt m_initialAltCpbRemovalDelayOffset[MAX_CPB_CNT][2];
247  Bool m_concatenationFlag;
248  UInt m_auCpbRemovalDelayDelta;
249};
250class SEIPictureTiming : public SEI
251{
252public:
253  PayloadType payloadType() const { return PICTURE_TIMING; }
254  void copyTo (SEIPictureTiming& target);
255
256  SEIPictureTiming()
257  : m_picStruct               (0)
258  , m_sourceScanType          (0)
259  , m_duplicateFlag           (false)
260  , m_picDpbOutputDuDelay     (0)
261  {}
262  virtual ~SEIPictureTiming()
263  {
264  }
265
266  UInt  m_picStruct;
267  UInt  m_sourceScanType;
268  Bool  m_duplicateFlag;
269
270  UInt  m_auCpbRemovalDelay;
271  UInt  m_picDpbOutputDelay;
272  UInt  m_picDpbOutputDuDelay;
273  UInt  m_numDecodingUnitsMinus1;
274  Bool  m_duCommonCpbRemovalDelayFlag;
275  UInt  m_duCommonCpbRemovalDelayMinus1;
276  std::vector<UInt> m_numNalusInDuMinus1;
277  std::vector<UInt> m_duCpbRemovalDelayMinus1;
278};
279
280class SEIDecodingUnitInfo : public SEI
281{
282public:
283  PayloadType payloadType() const { return DECODING_UNIT_INFO; }
284
285  SEIDecodingUnitInfo()
286    : m_decodingUnitIdx(0)
287    , m_duSptCpbRemovalDelay(0)
288    , m_dpbOutputDuDelayPresentFlag(false)
289    , m_picSptDpbOutputDuDelay(0)
290  {}
291  virtual ~SEIDecodingUnitInfo() {}
292  Int m_decodingUnitIdx;
293  Int m_duSptCpbRemovalDelay;
294  Bool m_dpbOutputDuDelayPresentFlag;
295  Int m_picSptDpbOutputDuDelay;
296};
297
298class SEIRecoveryPoint : public SEI
299{
300public:
301  PayloadType payloadType() const { return RECOVERY_POINT; }
302
303  SEIRecoveryPoint() {}
304  virtual ~SEIRecoveryPoint() {}
305
306  Int  m_recoveryPocCnt;
307  Bool m_exactMatchingFlag;
308  Bool m_brokenLinkFlag;
309};
310
311class SEIFramePacking : public SEI
312{
313public:
314  PayloadType payloadType() const { return FRAME_PACKING; }
315
316  SEIFramePacking() {}
317  virtual ~SEIFramePacking() {}
318
319  Int  m_arrangementId;
320  Bool m_arrangementCancelFlag;
321  Int  m_arrangementType;
322  Bool m_quincunxSamplingFlag;
323  Int  m_contentInterpretationType;
324  Bool m_spatialFlippingFlag;
325  Bool m_frame0FlippedFlag;
326  Bool m_fieldViewsFlag;
327  Bool m_currentFrameIsFrame0Flag;
328  Bool m_frame0SelfContainedFlag;
329  Bool m_frame1SelfContainedFlag;
330  Int  m_frame0GridPositionX;
331  Int  m_frame0GridPositionY;
332  Int  m_frame1GridPositionX;
333  Int  m_frame1GridPositionY;
334  Int  m_arrangementReservedByte;
335  Bool m_arrangementPersistenceFlag;
336  Bool m_upsampledAspectRatio;
337};
338
339class SEISegmentedRectFramePacking : public SEI
340{
341public:
342  PayloadType payloadType() const { return SEGM_RECT_FRAME_PACKING; }
343
344  SEISegmentedRectFramePacking() {}
345  virtual ~SEISegmentedRectFramePacking() {}
346
347  Bool m_arrangementCancelFlag;
348  Int  m_contentInterpretationType;
349  Bool m_arrangementPersistenceFlag;
350};
351
352class SEIDisplayOrientation : public SEI
353{
354public:
355  PayloadType payloadType() const { return DISPLAY_ORIENTATION; }
356
357  SEIDisplayOrientation()
358    : cancelFlag(true)
359    , persistenceFlag(0)
360    , extensionFlag(false)
361    {}
362  virtual ~SEIDisplayOrientation() {}
363
364  Bool cancelFlag;
365  Bool horFlip;
366  Bool verFlip;
367
368  UInt anticlockwiseRotation;
369  Bool persistenceFlag;
370  Bool extensionFlag;
371};
372
373class SEITemporalLevel0Index : public SEI
374{
375public:
376  PayloadType payloadType() const { return TEMPORAL_LEVEL0_INDEX; }
377
378  SEITemporalLevel0Index()
379    : tl0Idx(0)
380    , rapIdx(0)
381    {}
382  virtual ~SEITemporalLevel0Index() {}
383
384  UInt tl0Idx;
385  UInt rapIdx;
386};
387
388class SEIGradualDecodingRefreshInfo : public SEI
389{
390public:
391  PayloadType payloadType() const { return REGION_REFRESH_INFO; }
392
393  SEIGradualDecodingRefreshInfo()
394    : m_gdrForegroundFlag(0)
395  {}
396  virtual ~SEIGradualDecodingRefreshInfo() {}
397
398  Bool m_gdrForegroundFlag;
399};
400
401class SEINoDisplay : public SEI
402{
403public:
404  PayloadType payloadType() const { return NO_DISPLAY; }
405
406  SEINoDisplay()
407    : m_noDisplay(false)
408  {}
409  virtual ~SEINoDisplay() {}
410
411  Bool m_noDisplay;
412};
413
414class SEISOPDescription : public SEI
415{
416public:
417  PayloadType payloadType() const { return SOP_DESCRIPTION; }
418
419  SEISOPDescription() {}
420  virtual ~SEISOPDescription() {}
421
422  UInt m_sopSeqParameterSetId;
423  UInt m_numPicsInSopMinus1;
424
425  UInt m_sopDescVclNaluType[MAX_NUM_PICS_IN_SOP];
426  UInt m_sopDescTemporalId[MAX_NUM_PICS_IN_SOP];
427  UInt m_sopDescStRpsIdx[MAX_NUM_PICS_IN_SOP];
428  Int m_sopDescPocDelta[MAX_NUM_PICS_IN_SOP];
429};
430
431class SEIToneMappingInfo : public SEI
432{
433public:
434  PayloadType payloadType() const { return TONE_MAPPING_INFO; }
435  SEIToneMappingInfo() {}
436  virtual ~SEIToneMappingInfo() {}
437
438  Int    m_toneMapId;
439  Bool   m_toneMapCancelFlag;
440  Bool   m_toneMapPersistenceFlag;
441  Int    m_codedDataBitDepth;
442  Int    m_targetBitDepth;
443  Int    m_modelId;
444  Int    m_minValue;
445  Int    m_maxValue;
446  Int    m_sigmoidMidpoint;
447  Int    m_sigmoidWidth;
448  std::vector<Int> m_startOfCodedInterval;
449  Int    m_numPivots;
450  std::vector<Int> m_codedPivotValue;
451  std::vector<Int> m_targetPivotValue;
452  Int    m_cameraIsoSpeedIdc;
453  Int    m_cameraIsoSpeedValue;
454  Int    m_exposureIndexIdc;
455  Int    m_exposureIndexValue;
456  Bool   m_exposureCompensationValueSignFlag;
457  Int    m_exposureCompensationValueNumerator;
458  Int    m_exposureCompensationValueDenomIdc;
459  Int    m_refScreenLuminanceWhite;
460  Int    m_extendedRangeWhiteLevel;
461  Int    m_nominalBlackLevelLumaCodeValue;
462  Int    m_nominalWhiteLevelLumaCodeValue;
463  Int    m_extendedWhiteLevelLumaCodeValue;
464};
465
466class SEIKneeFunctionInfo : public SEI
467{
468public:
469  PayloadType payloadType() const { return KNEE_FUNCTION_INFO; }
470  SEIKneeFunctionInfo() {}
471  virtual ~SEIKneeFunctionInfo() {}
472
473  Int   m_kneeId;
474  Bool  m_kneeCancelFlag;
475  Bool  m_kneePersistenceFlag;
476  Int   m_kneeInputDrange;
477  Int   m_kneeInputDispLuminance;
478  Int   m_kneeOutputDrange;
479  Int   m_kneeOutputDispLuminance;
480  Int   m_kneeNumKneePointsMinus1;
481  std::vector<Int> m_kneeInputKneePoint;
482  std::vector<Int> m_kneeOutputKneePoint;
483};
484
485class SEIColourRemappingInfo : public SEI
486{
487public:
488
489  struct CRIlut
490  {
491    Int codedValue;
492    Int targetValue;
493    bool operator < (const CRIlut& a) const
494    {
495      return codedValue < a.codedValue;
496    }
497  };
498
499  PayloadType payloadType() const { return COLOUR_REMAPPING_INFO; }
500  SEIColourRemappingInfo() {}
501  ~SEIColourRemappingInfo() {}
502
503  Void copyFrom( const SEIColourRemappingInfo &seiCriInput)
504      {
505    (*this) = seiCriInput;
506  }
507
508  UInt                m_colourRemapId;
509  Bool                m_colourRemapCancelFlag;
510  Bool                m_colourRemapPersistenceFlag;
511  Bool                m_colourRemapVideoSignalInfoPresentFlag;
512  Bool                m_colourRemapFullRangeFlag;
513  Int                 m_colourRemapPrimaries;
514  Int                 m_colourRemapTransferFunction;
515  Int                 m_colourRemapMatrixCoefficients;
516  Int                 m_colourRemapInputBitDepth;
517  Int                 m_colourRemapBitDepth;
518  Int                 m_preLutNumValMinus1[3];
519  std::vector<CRIlut> m_preLut[3];
520  Bool                m_colourRemapMatrixPresentFlag;
521  Int                 m_log2MatrixDenom;
522  Int                 m_colourRemapCoeffs[3][3];
523  Int                 m_postLutNumValMinus1[3];
524  std::vector<CRIlut> m_postLut[3];
525};
526
527class SEIChromaResamplingFilterHint : public SEI
528{
529public:
530  PayloadType payloadType() const {return CHROMA_RESAMPLING_FILTER_HINT;}
531  SEIChromaResamplingFilterHint() {}
532  virtual ~SEIChromaResamplingFilterHint() {}
533
534  Int   m_verChromaFilterIdc;
535  Int   m_horChromaFilterIdc;
536  Bool                           m_verFilteringFieldProcessingFlag;
537  Int   m_targetFormatIdc;
538  Bool  m_perfectReconstructionFlag;
539  std::vector<std::vector<Int> > m_verFilterCoeff;
540  std::vector<std::vector<Int> > m_horFilterCoeff;
541};
542
543class SEIMasteringDisplayColourVolume : public SEI
544{
545public:
546    PayloadType payloadType() const { return MASTERING_DISPLAY_COLOUR_VOLUME; }
547    SEIMasteringDisplayColourVolume() {}
548    virtual ~SEIMasteringDisplayColourVolume(){}
549
550    TComSEIMasteringDisplay values;
551};
552
553#if NH_MV
554#if !NH_MV_SEI
555class SEISubBitstreamProperty : public SEI
556{
557public:
558  PayloadType payloadType() const { return SUB_BITSTREAM_PROPERTY; }
559
560  SEISubBitstreamProperty():   m_activeVpsId(-1), m_numAdditionalSubStreams(0) {}
561  virtual ~SEISubBitstreamProperty() {}
562
563  Int  m_activeVpsId;
564  Int  m_numAdditionalSubStreams;
565  std::vector<Int>  m_subBitstreamMode;
566  std::vector<Int>  m_outputLayerSetIdxToVps;
567  std::vector<Int>  m_highestSublayerId;
568  std::vector<Int>  m_avgBitRate;
569  std::vector<Int>  m_maxBitRate;
570};
571#endif
572#endif
573
574typedef std::list<SEI*> SEIMessages;
575
576/// output a selection of SEI messages by payload type. Ownership stays in original message list.
577SEIMessages getSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
578
579/// remove a selection of SEI messages by payload type from the original list and return them in a new list.
580SEIMessages extractSeisByType(SEIMessages &seiList, SEI::PayloadType seiType);
581
582/// delete list of SEI messages (freeing the referenced objects)
583Void deleteSEIs (SEIMessages &seiList);
584
585class SEIScalableNesting : public SEI
586{
587public:
588  PayloadType payloadType() const { return SCALABLE_NESTING; }
589
590  SEIScalableNesting() {}
591
592  virtual ~SEIScalableNesting()
593  {
594    deleteSEIs(m_nestedSEIs);
595  }
596
597  Bool  m_bitStreamSubsetFlag;
598  Bool  m_nestingOpFlag;
599  Bool  m_defaultOpFlag;                             //value valid if m_nestingOpFlag != 0
600  UInt  m_nestingNumOpsMinus1;                       // -"-
601  UInt  m_nestingMaxTemporalIdPlus1[MAX_TLAYER];     // -"-
602  UInt  m_nestingOpIdx[MAX_NESTING_NUM_OPS];         // -"-
603
604  Bool  m_allLayersFlag;                             //value valid if m_nestingOpFlag == 0
605  UInt  m_nestingNoOpMaxTemporalIdPlus1;             //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
606  UInt  m_nestingNumLayersMinus1;                    //value valid if m_nestingOpFlag == 0 and m_allLayersFlag == 0
607  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
608
609  SEIMessages m_nestedSEIs;
610};
611
612class SEITimeCode : public SEI
613{
614public:
615  PayloadType payloadType() const { return TIME_CODE; }
616  SEITimeCode() {}
617  virtual ~SEITimeCode(){}
618
619  UInt numClockTs;
620  TComSEITimeSet timeSetArray[MAX_TIMECODE_SEI_SETS];
621};
622
623//definition according to P1005_v1;
624class SEITempMotionConstrainedTileSets: public SEI
625{
626  struct TileSetData
627  {
628    protected:
629      std::vector<Int> m_top_left_tile_index;  //[tileSetIdx][tileIdx];
630      std::vector<Int> m_bottom_right_tile_index;
631
632    public:
633      Int     m_mcts_id;
634      Bool    m_display_tile_set_flag;
635      Int     m_num_tile_rects_in_set; //_minus1;
636      Bool    m_exact_sample_value_match_flag;
637      Bool    m_mcts_tier_level_idc_present_flag;
638      Bool    m_mcts_tier_flag;
639      Int     m_mcts_level_idc;
640
641      Void setNumberOfTileRects(const Int number)
642      {
643        m_top_left_tile_index    .resize(number);
644        m_bottom_right_tile_index.resize(number);
645      }
646
647      Int  getNumberOfTileRects() const
648      {
649        assert(m_top_left_tile_index.size() == m_bottom_right_tile_index.size());
650        return Int(m_top_left_tile_index.size());
651      }
652
653            Int &topLeftTileIndex    (const Int tileRectIndex)       { return m_top_left_tile_index    [tileRectIndex]; }
654            Int &bottomRightTileIndex(const Int tileRectIndex)       { return m_bottom_right_tile_index[tileRectIndex]; }
655      const Int &topLeftTileIndex    (const Int tileRectIndex) const { return m_top_left_tile_index    [tileRectIndex]; }
656      const Int &bottomRightTileIndex(const Int tileRectIndex) const { return m_bottom_right_tile_index[tileRectIndex]; }
657  };
658
659protected:
660  std::vector<TileSetData> m_tile_set_data;
661
662public:
663
664  Bool    m_mc_all_tiles_exact_sample_value_match_flag;
665  Bool    m_each_tile_one_tile_set_flag;
666  Bool    m_limited_tile_set_display_flag;
667  Bool    m_max_mcs_tier_level_idc_present_flag;
668  Bool    m_max_mcts_tier_flag;
669  Int     m_max_mcts_level_idc;
670
671  PayloadType payloadType() const { return TEMP_MOTION_CONSTRAINED_TILE_SETS; }
672
673  Void setNumberOfTileSets(const Int number)       { m_tile_set_data.resize(number);     }
674  Int  getNumberOfTileSets()                 const { return Int(m_tile_set_data.size()); }
675
676        TileSetData &tileSetData (const Int index)       { return m_tile_set_data[index]; }
677  const TileSetData &tileSetData (const Int index) const { return m_tile_set_data[index]; }
678
679};
680#if NH_MV_SEI
681#if NH_MV_LAYERS_NOT_PRESENT_SEI
682class SEILayersNotPresent : public SEI
683{
684public:
685  PayloadType payloadType( ) const { return LAYERS_NOT_PRESENT; }
686  SEILayersNotPresent ( ) { };
687  ~SEILayersNotPresent( ) { };
688  SEI* getCopy( ) const { return new SEILayersNotPresent(*this); };
689
690  Void setupFromCfgFile( const TChar*     cfgFile );
691  Bool checkCfg        ( const TComSlice* slice   );
692
693  Int       m_lnpSeiActiveVpsId;
694  UInt      m_lnpSeiMaxLayers;
695  BoolAry1d m_layerNotPresentFlag;
696
697  Void resizeDimI( Int sizeDimI )
698  {
699    m_layerNotPresentFlag.resize( sizeDimI );
700  }
701};
702#endif
703
704class SEIInterLayerConstrainedTileSets : public SEI
705{
706public:
707  PayloadType payloadType( ) const { return INTER_LAYER_CONSTRAINED_TILE_SETS; }
708  SEIInterLayerConstrainedTileSets ( ) { };
709  ~SEIInterLayerConstrainedTileSets( ) { };
710  SEI* getCopy( ) const { return new SEIInterLayerConstrainedTileSets(*this); };
711
712  Void setupFromCfgFile( const TChar*     cfgFile );
713  Bool checkCfg        ( const TComSlice* slice   );
714
715  Bool      m_ilAllTilesExactSampleValueMatchFlag;
716  Bool      m_ilOneTilePerTileSetFlag;
717  Int       m_ilNumSetsInMessageMinus1;
718  Bool      m_skippedTileSetPresentFlag;
719  IntAry1d  m_ilctsId;
720  IntAry1d  m_ilNumTileRectsInSetMinus1;
721  IntAry2d  m_ilTopLeftTileIndex;
722  IntAry2d  m_ilBottomRightTileIndex;
723  IntAry1d  m_ilcIdc;
724  BoolAry1d m_ilExactSampleValueMatchFlag;
725  Int       m_allTilesIlcIdc;
726
727  Void      resizeDimI( Int sizeDimI )
728  {
729    m_ilctsId                    .resize( sizeDimI );
730    m_ilNumTileRectsInSetMinus1  .resize( sizeDimI );
731    m_ilTopLeftTileIndex         .resize( sizeDimI );
732    m_ilBottomRightTileIndex     .resize( sizeDimI );
733    m_ilcIdc                     .resize( sizeDimI );
734    m_ilExactSampleValueMatchFlag.resize( sizeDimI );
735  }
736
737  Void      resizeDimJ( Int i, Int sizeDimJ )
738  {
739    m_ilTopLeftTileIndex    [i].resize( sizeDimJ );
740    m_ilBottomRightTileIndex[i].resize( sizeDimJ );
741  }
742
743};
744
745#if NH_MV_TBD
746class SEIBspNesting : public SEI
747{
748public:
749  PayloadType payloadType( ) const { return BSP_NESTING; }
750  SEIBspNesting ( ) { };
751  ~SEIBspNesting( ) { };
752  SEI* getCopy( ) const { return new SEIBspNesting(*this); };
753
754  Void setupFromCfgFile( const TChar*      cfgFile );
755  Void setupFromSlice  ( const TComSlice* slice   );
756  Bool checkCfg        ( const TComSlice* slice   );
757
758  Int       m_seiOlsIdx;
759  Int       m_seiPartitioningSchemeIdx;
760  Int       m_bspIdx;
761  Int       m_bspNestingZeroBit;
762  Int       m_numSeisInBspMinus1;
763};
764
765class SEIBspInitialArrivalTime : public SEI
766{
767public:
768  PayloadType payloadType( ) const { return BSP_INITIAL_ARRIVAL_TIME; }
769  SEIBspInitialArrivalTime ( ) { };
770  ~SEIBspInitialArrivalTime( ) { };
771  SEI* getCopy( ) const { return new SEIBspInitialArrivalTime(*this); };
772
773  Void setupFromCfgFile( const TChar*      cfgFile );
774  Void setupFromSlice  ( const TComSlice* slice   );
775  Bool checkCfg        ( const TComSlice* slice   );
776
777  IntAry1d  m_nalInitialArrivalDelay;
778  IntAry1d  m_vclInitialArrivalDelay;
779};
780#endif
781
782class SEISubBitstreamProperty : public SEI
783{
784public:
785  PayloadType payloadType( ) const { return SUB_BITSTREAM_PROPERTY; }
786  SEISubBitstreamProperty ( ) { };
787  ~SEISubBitstreamProperty( ) { };
788  SEI* getCopy( ) const { return new SEISubBitstreamProperty(*this); };
789
790  Void setupFromCfgFile( const TChar*     cfgFile );
791  Bool checkCfg        ( const TComSlice* slice   );
792  Void resizeArrays    ( );
793
794  Int       m_sbPropertyActiveVpsId;
795  Int       m_numAdditionalSubStreamsMinus1;
796  IntAry1d  m_subBitstreamMode;
797  IntAry1d  m_olsIdxToVps;
798  IntAry1d  m_highestSublayerId;
799  IntAry1d  m_avgSbPropertyBitRate;
800  IntAry1d  m_maxSbPropertyBitRate;
801};
802
803class SEIAlphaChannelInfo : public SEI
804{
805public:
806  PayloadType payloadType( ) const { return ALPHA_CHANNEL_INFO; }
807  SEIAlphaChannelInfo ( ) { };
808  ~SEIAlphaChannelInfo( ) { };
809  SEI* getCopy( ) const { return new SEIAlphaChannelInfo(*this); };
810
811  Void setupFromCfgFile( const TChar*     cfgFile );
812  Bool checkCfg        ( const TComSlice* slice   );
813
814  Bool      m_alphaChannelCancelFlag;
815  Int       m_alphaChannelUseIdc;
816  Int       m_alphaChannelBitDepthMinus8;
817  Int       m_alphaTransparentValue;
818  Int       m_alphaOpaqueValue;
819  Bool      m_alphaChannelIncrFlag;
820  Bool      m_alphaChannelClipFlag;
821  Bool      m_alphaChannelClipTypeFlag;
822};
823
824class SEIOverlayInfo : public SEI
825{
826public:
827  PayloadType payloadType( ) const { return OVERLAY_INFO; }
828  SEIOverlayInfo ( );
829  ~SEIOverlayInfo( ) { };
830  SEI* getCopy( ) const { return new SEIOverlayInfo(*this); };
831
832  Void setupFromCfgFile( const TChar*     cfgFile );
833  Bool checkCfg        ( const TComSlice* slice   );
834
835  const Int m_numOverlaysMax;
836  const Int m_numOverlayElementsMax;
837  const Int m_numStringBytesMax;  //incl. null termination byte
838
839  Bool      m_overlayInfoCancelFlag;
840  Int       m_overlayContentAuxIdMinus128;
841  Int       m_overlayLabelAuxIdMinus128;
842  Int       m_overlayAlphaAuxIdMinus128;
843  Int       m_overlayElementLabelValueLengthMinus8;
844  Int       m_numOverlaysMinus1;
845  IntAry1d  m_overlayIdx;
846  BoolAry1d m_languageOverlayPresentFlag;
847  IntAry1d  m_overlayContentLayerId;
848  BoolAry1d m_overlayLabelPresentFlag;
849  IntAry1d  m_overlayLabelLayerId;
850  BoolAry1d m_overlayAlphaPresentFlag;
851  IntAry1d  m_overlayAlphaLayerId;
852  IntAry1d  m_numOverlayElementsMinus1;
853  IntAry2d  m_overlayElementLabelMin;
854  IntAry2d  m_overlayElementLabelMax;
855  StringAry1d  m_overlayLanguage;
856  StringAry1d  m_overlayName;
857  StringAry2d  m_overlayElementName;
858  Bool      m_overlayInfoPersistenceFlag;
859};
860
861class SEITemporalMvPredictionConstraints : public SEI
862{
863public:
864  PayloadType payloadType( ) const { return TEMPORAL_MV_PREDICTION_CONSTRAINTS; }
865  SEITemporalMvPredictionConstraints ( ) { };
866  ~SEITemporalMvPredictionConstraints( ) { };
867  SEI* getCopy( ) const { return new SEITemporalMvPredictionConstraints(*this); };
868
869  Void setupFromCfgFile( const TChar*     cfgFile );
870  Bool checkCfg        ( const TComSlice* slice   );
871
872  Bool      m_prevPicsNotUsedFlag;
873  Bool      m_noIntraLayerColPicFlag;
874};
875
876#if NH_MV_SEI_TBD
877class SEIFrameFieldInfo : public SEI
878{
879public:
880  PayloadType payloadType( ) const { return FRAME_FIELD_INFO; }
881  SEIFrameFieldInfo ( ) { };
882  ~SEIFrameFieldInfo( ) { };
883  SEI* getCopy( ) const { return new SEIFrameFieldInfo(*this); };
884
885  Void setupFromCfgFile( const TChar*     cfgFile );
886  Void setupFromSlice  ( const TComSlice* slice   );
887  Bool checkCfg        ( const TComSlice* slice   );
888
889  Int       m_ffinfoPicStruct;
890  Int       m_ffinfoSourceScanType;
891  Bool      m_ffinfoDuplicateFlag;
892};
893#endif
894
895class SEIThreeDimensionalReferenceDisplaysInfo : public SEI
896{
897public:
898  PayloadType payloadType( ) const { return THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO; }
899  SEIThreeDimensionalReferenceDisplaysInfo ( ) { };
900  ~SEIThreeDimensionalReferenceDisplaysInfo( ) { };
901  SEI* getCopy( ) const { return new SEIThreeDimensionalReferenceDisplaysInfo(*this); };
902
903  Void setupFromCfgFile( const TChar*     cfgFile );
904  Bool checkCfg        ( const TComSlice* slice   );
905
906  Int getNumRefDisplaysMinus1( ) const
907  {
908    return m_numRefDisplaysMinus1;
909  }
910
911  Int       m_precRefDisplayWidth;
912  Bool      m_refViewingDistanceFlag;
913  Int       m_precRefViewingDist;
914  Int       m_numRefDisplaysMinus1;
915  IntAry1d  m_leftViewId;
916  IntAry1d  m_rightViewId;
917  IntAry1d  m_exponentRefDisplayWidth;
918  IntAry1d  m_mantissaRefDisplayWidth;
919  IntAry1d  m_exponentRefViewingDistance;
920  IntAry1d  m_mantissaRefViewingDistance;
921  BoolAry1d m_additionalShiftPresentFlag;
922  IntAry1d  m_numSampleShiftPlus512;
923  Bool      m_threeDimensionalReferenceDisplaysExtensionFlag;
924
925  Void resizeArrays( )
926  {
927    Int numReferenceDiaplays = getNumRefDisplaysMinus1() + 1;
928
929    m_leftViewId    .resize( numReferenceDiaplays );
930    m_rightViewId   .resize( numReferenceDiaplays );
931    m_exponentRefDisplayWidth      .resize( numReferenceDiaplays );
932    m_mantissaRefDisplayWidth      .resize( numReferenceDiaplays );
933    m_exponentRefViewingDistance   .resize( numReferenceDiaplays );
934    m_mantissaRefViewingDistance   .resize( numReferenceDiaplays );
935    m_additionalShiftPresentFlag   .resize( numReferenceDiaplays );
936    m_numSampleShiftPlus512        .resize( numReferenceDiaplays );
937  }
938
939  UInt getMantissaReferenceDisplayWidthLen  ( Int i ) const ;
940  UInt getMantissaReferenceViewingDistanceLen  ( Int i ) const ;
941private:
942  UInt xGetSyntaxElementLen( Int expo, Int prec, Int val ) const;
943};
944
945#if SEI_DRI_F0169
946class SEIDepthRepresentationInfo : public SEI
947{
948    public:
949        PayloadType payloadType( ) const { return DEPTH_REPRESENTATION_INFO; }
950        SEIDepthRepresentationInfo ( )
951        {
952            m_currLayerID=-1;
953        };
954        ~SEIDepthRepresentationInfo( ) { };
955        SEI* getCopy( ) const { return new SEIDepthRepresentationInfo(*this); };
956
957        Void setupFromCfgFile( const TChar*     cfgFile );
958        Void setupFromSlice  ( const TComSlice* slice   );
959        Bool checkCfg        ( const TComSlice* slice   );
960        Void clear()
961        {
962            int i;
963            m_zNearFlag.clear();
964            m_zFarFlag.clear();
965            m_dMinFlag.clear();
966            m_dMaxFlag.clear();
967
968            for(i=0;i<m_zNear.size();i++)
969                m_zNear[i].clear();
970            m_zNear.clear();
971
972            for(i=0;i<m_zFar.size();i++)
973                m_zFar[i].clear();
974            m_zFar.clear();
975
976            for(i=0;i<m_dMin.size();i++)
977                m_dMin[i].clear();
978            m_dMin.clear();
979
980            for(i=0;i<m_dMax.size();i++)
981                m_dMax[i].clear();
982            m_dMax.clear();
983
984            for(i=0;i<m_depthRepresentationType.size();i++)
985                m_depthRepresentationType[i].clear();
986            m_depthRepresentationType.clear();
987
988            for(i=0;i<m_disparityRefViewId.size();i++)
989                m_disparityRefViewId[i].clear();
990            m_disparityRefViewId.clear();
991
992            for(i=0;i<m_depthNonlinearRepresentationNumMinus1.size();i++)
993                m_depthNonlinearRepresentationNumMinus1[i].clear();
994            m_depthNonlinearRepresentationNumMinus1.clear();
995
996            for(i=0;i<m_depth_nonlinear_representation_model.size();i++)
997                m_depth_nonlinear_representation_model[i].clear();
998            m_depth_nonlinear_representation_model.clear();
999
1000        }
1001        Int m_currLayerID;
1002        BoolAry1d      m_zNearFlag;
1003        BoolAry1d      m_zFarFlag;
1004        BoolAry1d      m_dMinFlag;
1005        BoolAry1d      m_dMaxFlag;
1006        BoolAry2d      m_depthRepresentationInfoSeiPresentFlag;
1007        std::vector< std::vector<Double> > m_zNear,m_zFar,m_dMin,m_dMax;
1008
1009        IntAry2d       m_depthRepresentationType;
1010        IntAry2d       m_disparityRefViewId;
1011        IntAry2d       m_depthNonlinearRepresentationNumMinus1;
1012        IntAry2d       m_depth_nonlinear_representation_model;
1013};
1014#endif
1015
1016class SEIMultiviewSceneInfo : public SEI
1017{
1018public:
1019  PayloadType payloadType( ) const { return MULTIVIEW_SCENE_INFO; }
1020  SEIMultiviewSceneInfo ( ) { };
1021  ~SEIMultiviewSceneInfo( ) { };
1022  SEI* getCopy( ) const { return new SEIMultiviewSceneInfo(*this); };
1023
1024  Void setupFromCfgFile( const TChar*     cfgFile );
1025  Bool checkCfg        ( const TComSlice* slice   );
1026
1027  Int       m_minDisparity;
1028  Int       m_maxDisparityRange;
1029};
1030
1031
1032class SEIMultiviewAcquisitionInfo : public SEI
1033{
1034public:
1035  PayloadType payloadType( ) const { return MULTIVIEW_ACQUISITION_INFO; }
1036  SEIMultiviewAcquisitionInfo ( ) { };
1037  ~SEIMultiviewAcquisitionInfo( ) { };
1038  SEI* getCopy( ) const { return new SEIMultiviewAcquisitionInfo(*this); };
1039
1040  Void setupFromCfgFile( const TChar*     cfgFile );
1041  Bool checkCfg        ( const TComSlice* slice   );
1042
1043  Int getNumViewsMinus1( ) const
1044  {
1045    Int numViewsMinus1;
1046    if( m_scalNestSeiContThisSei != NULL )
1047    {
1048      numViewsMinus1 = m_scalNestSeiContThisSei->m_nestingNumLayersMinus1;
1049    }
1050    else
1051    {
1052      numViewsMinus1 = 0;
1053    }
1054    return numViewsMinus1;
1055  }
1056
1057  Void resizeArrays( )
1058  {
1059    Int numViews = getNumViewsMinus1() + 1;
1060    m_signFocalLengthX       .resize( numViews );
1061    m_exponentFocalLengthX   .resize( numViews );
1062    m_mantissaFocalLengthX   .resize( numViews );
1063    m_signFocalLengthY       .resize( numViews );
1064    m_exponentFocalLengthY   .resize( numViews );
1065    m_mantissaFocalLengthY   .resize( numViews );
1066    m_signPrincipalPointX    .resize( numViews );
1067    m_exponentPrincipalPointX.resize( numViews );
1068    m_mantissaPrincipalPointX.resize( numViews );
1069    m_signPrincipalPointY    .resize( numViews );
1070    m_exponentPrincipalPointY.resize( numViews );
1071    m_mantissaPrincipalPointY.resize( numViews );
1072    m_signSkewFactor         .resize( numViews );
1073    m_exponentSkewFactor     .resize( numViews );
1074    m_mantissaSkewFactor     .resize( numViews );
1075
1076    m_signR                  .resize( numViews );
1077    m_exponentR              .resize( numViews );
1078    m_mantissaR              .resize( numViews );
1079    m_signT                  .resize( numViews );
1080    m_exponentT              .resize( numViews );
1081    m_mantissaT              .resize( numViews );
1082
1083    for( Int i = 0; i  < numViews ; i++ )
1084    {
1085      m_signR    [i].resize( 3 );
1086      m_exponentR[i].resize( 3 );
1087      m_mantissaR[i].resize( 3 );
1088      m_signT    [i].resize( 3 );
1089      m_exponentT[i].resize( 3 );
1090      m_mantissaT[i].resize( 3 );
1091
1092      for (Int j = 0; j < 3; j++)
1093      {
1094        m_signR    [i][j].resize( 3 );
1095        m_exponentR[i][j].resize( 3 );
1096        m_mantissaR[i][j].resize( 3 );
1097      }
1098    }
1099  }
1100
1101  UInt getMantissaFocalLengthXLen   ( Int i ) const ;
1102  UInt getMantissaFocalLengthYLen   ( Int i ) const ;
1103  UInt getMantissaPrincipalPointXLen( Int i ) const ;
1104  UInt getMantissaPrincipalPointYLen( Int i ) const ;
1105  UInt getMantissaSkewFactorLen     ( Int i ) const ;
1106  UInt getMantissaRLen              ( Int i, Int j, Int k ) const ;
1107  UInt getMantissaTLen              ( Int i, Int j )        const ;
1108
1109  Bool      m_intrinsicParamFlag;
1110  Bool      m_extrinsicParamFlag;
1111  Bool      m_intrinsicParamsEqualFlag;
1112  Int       m_precFocalLength;
1113  Int       m_precPrincipalPoint;
1114  Int       m_precSkewFactor;
1115  BoolAry1d m_signFocalLengthX;
1116  IntAry1d  m_exponentFocalLengthX;
1117  IntAry1d  m_mantissaFocalLengthX;
1118  BoolAry1d m_signFocalLengthY;
1119  IntAry1d  m_exponentFocalLengthY;
1120  IntAry1d  m_mantissaFocalLengthY;
1121  BoolAry1d m_signPrincipalPointX;
1122  IntAry1d  m_exponentPrincipalPointX;
1123  IntAry1d  m_mantissaPrincipalPointX;
1124  BoolAry1d m_signPrincipalPointY;
1125  IntAry1d  m_exponentPrincipalPointY;
1126  IntAry1d  m_mantissaPrincipalPointY;
1127  BoolAry1d m_signSkewFactor;
1128  IntAry1d  m_exponentSkewFactor;
1129  IntAry1d  m_mantissaSkewFactor;
1130  Int       m_precRotationParam;
1131  Int       m_precTranslationParam;
1132  BoolAry3d m_signR;
1133  IntAry3d  m_exponentR;
1134  IntAry3d  m_mantissaR;
1135  BoolAry2d m_signT;
1136  IntAry2d  m_exponentT;
1137  IntAry2d  m_mantissaT;
1138private:
1139  UInt xGetSyntaxElementLen( Int expo, Int prec, Int val ) const;
1140};
1141
1142
1143
1144class SEIMultiviewViewPosition : public SEI
1145{
1146public:
1147  PayloadType payloadType( ) const { return MULTIVIEW_VIEW_POSITION; }
1148  SEIMultiviewViewPosition ( ) { };
1149  ~SEIMultiviewViewPosition( ) { };
1150  SEI* getCopy( ) const { return new SEIMultiviewViewPosition(*this); };
1151
1152  Void setupFromCfgFile( const TChar*     cfgFile );
1153  Void setupFromSlice  ( const TComSlice* slice   );
1154  Bool checkCfg        ( const TComSlice* slice   );
1155
1156  Int       m_numViewsMinus1;
1157  IntAry1d  m_viewPosition;
1158};
1159
1160#if NH_3D
1161class SEIAlternativeDepthInfo : public SEI
1162{
1163public:
1164  PayloadType payloadType( ) const { return ALTERNATIVE_DEPTH_INFO; }
1165  SEIAlternativeDepthInfo ( ) { };
1166  ~SEIAlternativeDepthInfo( ) { };
1167  SEI* getCopy( ) const { return new SEIAlternativeDepthInfo(*this); };
1168
1169  Void setupFromCfgFile( const TChar*     cfgFile );
1170  Bool checkCfg        ( const TComSlice* slice   );
1171
1172  UInt getManGvdFocalLengthXLen       ( Int i, Int j ) const;
1173  UInt getManGvdFocalLengthYLen       ( Int i, Int j ) const;
1174  UInt getManGvdPrincipalPointXLen    ( Int i, Int j ) const;
1175  UInt getManGvdPrincipalPointYLen    ( Int i, Int j ) const;
1176  //UInt getManGvdRLen                  ( Int i, int j ) const;
1177  UInt getManGvdTXLen                 ( Int i, Int j ) const;
1178  UInt xGetSyntaxElementLen           ( Int expo, Int prec, Int val ) const;
1179
1180  Void resizeArrays( )
1181  {
1182    const Int numViews = 3; // getNumConstituentViewsGvdMinus1() + 1;
1183
1184    m_signGvdZNearFlag.resize(3);
1185    m_expGvdZNear.resize(3);
1186    m_manLenGvdZNearMinus1.resize(3);
1187    m_manGvdZNear.resize(3);
1188    m_signGvdZFarFlag.resize(3);
1189    m_expGvdZFar.resize(3);
1190    m_manLenGvdZFarMinus1.resize(3);
1191    m_manGvdZFar.resize(3);
1192
1193    m_signGvdFocalLengthX.resize(3);
1194    m_expGvdFocalLengthX.resize(3);
1195    m_manGvdFocalLengthX.resize(3);
1196    m_signGvdFocalLengthY.resize(3);
1197    m_expGvdFocalLengthY.resize(3);
1198    m_manGvdFocalLengthY.resize(3);
1199    m_signGvdPrincipalPointX.resize(3);
1200    m_expGvdPrincipalPointX.resize(3);
1201    m_manGvdPrincipalPointX.resize(3);
1202    m_signGvdPrincipalPointY.resize(3);
1203    m_expGvdPrincipalPointY.resize(3);
1204    m_manGvdPrincipalPointY.resize(3);
1205
1206    m_signGvdR00.resize(3);
1207    m_expGvdR00.resize(3);
1208    m_manGvdR00.resize(3);
1209    m_signGvdR01.resize(3);
1210    m_expGvdR01.resize(3);
1211    m_manGvdR01.resize(3);
1212    m_signGvdR02.resize(3);
1213    m_expGvdR02.resize(3);
1214    m_manGvdR02.resize(3);
1215    m_signGvdR10.resize(3);
1216    m_expGvdR10.resize(3);
1217    m_manGvdR10.resize(3);
1218    m_signGvdR11.resize(3);
1219    m_expGvdR11.resize(3);
1220    m_manGvdR11.resize(3);
1221    m_signGvdR12.resize(3);
1222    m_expGvdR12.resize(3);
1223    m_manGvdR12.resize(3);
1224    m_signGvdR20.resize(3);
1225    m_expGvdR20.resize(3);
1226    m_manGvdR20.resize(3);
1227    m_signGvdR21.resize(3);
1228    m_expGvdR21.resize(3);
1229    m_manGvdR21.resize(3);
1230    m_signGvdR22.resize(3);
1231    m_expGvdR22.resize(3);
1232    m_manGvdR22.resize(3);
1233
1234    m_signGvdTX.resize(3);
1235    m_expGvdTX.resize(3);
1236    m_manGvdTX.resize(3);
1237
1238    for( Int i = 0; i < numViews; i++ )
1239    {
1240      m_signGvdZNearFlag[i].resize(3);
1241      m_expGvdZNear[i].resize(3);
1242      m_manLenGvdZNearMinus1[i].resize(3);
1243      m_manGvdZNear[i].resize(3);
1244      m_signGvdZFarFlag[i].resize(3);
1245      m_expGvdZFar[i].resize(3);
1246      m_manLenGvdZFarMinus1[i].resize(3);
1247      m_manGvdZFar[i].resize(3);
1248
1249      m_signGvdFocalLengthX[i].resize(3);
1250      m_expGvdFocalLengthX[i].resize(3);
1251      m_manGvdFocalLengthX[i].resize(3);
1252      m_signGvdFocalLengthY[i].resize(3);
1253      m_expGvdFocalLengthY[i].resize(3);
1254      m_manGvdFocalLengthY[i].resize(3);
1255      m_signGvdPrincipalPointX[i].resize(3);
1256      m_expGvdPrincipalPointX[i].resize(3);
1257      m_manGvdPrincipalPointX[i].resize(3);
1258      m_signGvdPrincipalPointY[i].resize(3);
1259      m_expGvdPrincipalPointY[i].resize(3);
1260      m_manGvdPrincipalPointY[i].resize(3);
1261
1262      m_signGvdR00[i].resize(3);
1263      m_expGvdR00[i].resize(3);
1264      m_manGvdR00[i].resize(3);
1265      m_signGvdR01[i].resize(3);
1266      m_expGvdR01[i].resize(3);
1267      m_manGvdR01[i].resize(3);
1268      m_signGvdR02[i].resize(3);
1269      m_expGvdR02[i].resize(3);
1270      m_manGvdR02[i].resize(3);
1271      m_signGvdR10[i].resize(3);
1272      m_expGvdR10[i].resize(3);
1273      m_manGvdR10[i].resize(3);
1274      m_signGvdR11[i].resize(3);
1275      m_expGvdR11[i].resize(3);
1276      m_manGvdR11[i].resize(3);
1277      m_signGvdR12[i].resize(3);
1278      m_expGvdR12[i].resize(3);
1279      m_manGvdR12[i].resize(3);
1280      m_signGvdR20[i].resize(3);
1281      m_expGvdR20[i].resize(3);
1282      m_manGvdR20[i].resize(3);
1283      m_signGvdR21[i].resize(3);
1284      m_expGvdR21[i].resize(3);
1285      m_manGvdR21[i].resize(3);
1286      m_signGvdR22[i].resize(3);
1287      m_expGvdR22[i].resize(3);
1288      m_manGvdR22[i].resize(3);
1289
1290      m_signGvdTX[i].resize(3);
1291      m_expGvdTX[i].resize(3);
1292      m_manGvdTX[i].resize(3);
1293    }
1294
1295  }
1296
1297  Bool      m_alternativeDepthInfoCancelFlag;
1298  Int       m_depthType;
1299  Int       m_numConstituentViewsGvdMinus1;
1300  Bool      m_depthPresentGvdFlag;
1301  Bool      m_zGvdFlag;
1302  Bool      m_intrinsicParamGvdFlag;
1303  Bool      m_rotationGvdFlag;
1304  Bool      m_translationGvdFlag;
1305  BoolAry2d m_signGvdZNearFlag;
1306  IntAry2d  m_expGvdZNear;
1307  IntAry2d  m_manLenGvdZNearMinus1;
1308  IntAry2d  m_manGvdZNear;
1309  BoolAry2d m_signGvdZFarFlag;
1310  IntAry2d  m_expGvdZFar;
1311  IntAry2d  m_manLenGvdZFarMinus1;
1312  IntAry2d  m_manGvdZFar;
1313  Int       m_precGvdFocalLength;
1314  Int       m_precGvdPrincipalPoint;
1315  Int       m_precGvdRotationParam;
1316  Int       m_precGvdTranslationParam;
1317  BoolAry2d m_signGvdFocalLengthX;
1318  IntAry2d  m_expGvdFocalLengthX;
1319  IntAry2d  m_manGvdFocalLengthX;
1320  BoolAry2d m_signGvdFocalLengthY;
1321  IntAry2d  m_expGvdFocalLengthY;
1322  IntAry2d  m_manGvdFocalLengthY;
1323  BoolAry2d m_signGvdPrincipalPointX;
1324  IntAry2d  m_expGvdPrincipalPointX;
1325  IntAry2d  m_manGvdPrincipalPointX;
1326  BoolAry2d m_signGvdPrincipalPointY;
1327  IntAry2d  m_expGvdPrincipalPointY;
1328  IntAry2d  m_manGvdPrincipalPointY;
1329
1330  BoolAry2d m_signGvdR00;
1331  IntAry2d  m_expGvdR00;
1332  IntAry2d  m_manGvdR00;
1333  BoolAry2d m_signGvdR01;
1334  IntAry2d  m_expGvdR01;
1335  IntAry2d  m_manGvdR01;
1336  BoolAry2d m_signGvdR02;
1337  IntAry2d  m_expGvdR02;
1338  IntAry2d  m_manGvdR02;
1339  BoolAry2d m_signGvdR10;
1340  IntAry2d  m_expGvdR10;
1341  IntAry2d  m_manGvdR10;
1342  BoolAry2d m_signGvdR11;
1343  IntAry2d  m_expGvdR11;
1344  IntAry2d  m_manGvdR11;
1345  BoolAry2d m_signGvdR12;
1346  IntAry2d  m_expGvdR12;
1347  IntAry2d  m_manGvdR12;
1348  BoolAry2d m_signGvdR20;
1349  IntAry2d  m_expGvdR20;
1350  IntAry2d  m_manGvdR20;
1351  BoolAry2d m_signGvdR21;
1352  IntAry2d  m_expGvdR21;
1353  IntAry2d  m_manGvdR21;
1354  BoolAry2d m_signGvdR22;
1355  IntAry2d  m_expGvdR22;
1356  IntAry2d  m_manGvdR22;
1357
1358  BoolAry2d m_signGvdTX;
1359  IntAry2d  m_expGvdTX;
1360  IntAry2d  m_manGvdTX;
1361
1362  Int       m_minOffsetXInt;
1363  Int       m_minOffsetXFrac;
1364  Int       m_maxOffsetXInt;
1365  Int       m_maxOffsetXFrac;
1366  Bool      m_offsetYPresentFlag;
1367  Int       m_minOffsetYInt;
1368  Int       m_minOffsetYFrac;
1369  Int       m_maxOffsetYInt;
1370  Int       m_maxOffsetYFrac;
1371  Bool      m_warpMapSizePresentFlag;
1372  Int       m_warpMapWidthMinus2;
1373  Int       m_warpMapHeightMinus2;
1374};
1375
1376#endif
1377#endif
1378#endif
1379
1380//! \}
Note: See TracBrowser for help on using the repository browser.