source: SHVCSoftware/branches/SHM-dev/source/App/TAppEncoder/TAppEncCfg.h @ 959

Last change on this file since 959 was 951, checked in by qualcomm, 10 years ago

Some fixes for implementation of support for profile tier and level for each layer in an output layer set.
Additionally, add conformance checking such that enhancement layers of an output layer set support the same profile.

submitted by Hendry (fhendry@…)

  • Property svn:eol-style set to native
File size: 30.9 KB
Line 
1/* The copyright in this software is being made available under the BSD
2 * License, included below. This software may be subject to other third party
3 * and contributor rights, including patent rights, and no such rights are
4 * granted under this license. 
5 *
6 * Copyright (c) 2010-2014, ITU/ISO/IEC
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are met:
11 *
12 *  * Redistributions of source code must retain the above copyright notice,
13 *    this list of conditions and the following disclaimer.
14 *  * Redistributions in binary form must reproduce the above copyright notice,
15 *    this list of conditions and the following disclaimer in the documentation
16 *    and/or other materials provided with the distribution.
17 *  * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
18 *    be used to endorse or promote products derived from this software without
19 *    specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
25 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
31 * THE POSSIBILITY OF SUCH DAMAGE.
32 */
33
34/** \file     TAppEncCfg.h
35    \brief    Handle encoder configuration parameters (header)
36*/
37
38#ifndef __TAPPENCCFG__
39#define __TAPPENCCFG__
40
41#include "TLibCommon/CommonDef.h"
42
43#include "TLibEncoder/TEncCfg.h"
44#if SVC_EXTENSION
45#include "TAppEncLayerCfg.h"
46#endif
47#include <sstream>
48#include <vector>
49//! \ingroup TAppEncoder
50//! \{
51
52// ====================================================================================================================
53// Class definition
54// ====================================================================================================================
55
56/// encoder configuration class
57class TAppEncCfg
58{
59protected:
60  // file I/O
61#if SVC_EXTENSION
62  TAppEncLayerCfg m_acLayerCfg [MAX_LAYERS];
63  Int       m_numLayers;                                      ///< number of layers
64  Int       m_scalabilityMask[MAX_VPS_NUM_SCALABILITY_TYPES]; ///< scalability_mask
65  Char*     m_pBitstreamFile;                                 ///< output bitstream file
66  Double    m_adLambdaModifier[ MAX_TLAYER ];                 ///< Lambda modifier array for each temporal layer
67  // source specification
68  UInt      m_FrameSkip;                                      ///< number of skipped frames from the beginning
69  Int       m_framesToBeEncoded;                              ///< number of encoded frames
70#if AVC_BASE
71#if VPS_AVC_BL_FLAG_REMOVAL
72  Int       m_nonHEVCBaseLayerFlag;                           ///< non HEVC BL
73#else
74  Int       m_avcBaseLayerFlag;                               ///< avc_baselayer_flag
75#endif
76#endif
77  Bool      m_maxTidRefPresentFlag; 
78#if Q0078_ADD_LAYER_SETS
79  Int       m_numLayerSets;
80  Int       m_numLayerInIdList[MAX_VPS_LAYER_SETS_PLUS1];
81  Int       m_layerSetLayerIdList[MAX_VPS_LAYER_SETS_PLUS1][MAX_VPS_LAYER_ID_PLUS1];
82  Int       m_numAddLayerSets;
83  Int       m_numHighestLayerIdx[MAX_VPS_LAYER_SETS_PLUS1];
84  Int       m_highestLayerIdx[MAX_VPS_LAYER_SETS_PLUS1][MAX_VPS_LAYER_ID_PLUS1];
85#endif
86#if OUTPUT_LAYER_SETS_CONFIG
87  std::vector<Int>                m_outputLayerSetIdx;
88  Int       m_defaultTargetOutputLayerIdc;
89  Int       m_numOutputLayerSets;
90  std::vector<Int>                m_numOutputLayersInOutputLayerSet;
91  std::vector< std::vector<Int> > m_listOfOutputLayers;
92#endif
93#else
94  Char*     m_pchInputFile;                                   ///< source file name
95  Char*     m_pchBitstreamFile;                               ///< output bitstream file
96  Char*     m_pchReconFile;                                   ///< output reconstruction file
97  Double    m_adLambdaModifier[ MAX_TLAYER ];                 ///< Lambda modifier array for each temporal layer
98  // source specification
99  Int       m_iFrameRate;                                     ///< source frame-rates (Hz)
100  UInt      m_FrameSkip;                                      ///< number of skipped frames from the beginning
101  Int       m_iSourceWidth;                                   ///< source width in pixel
102  Int       m_iSourceHeight;                                  ///< source height in pixel (when interlaced = field height)
103 
104  Int       m_iSourceHeightOrg;                               ///< original source height in pixel (when interlaced = frame height)
105 
106 
107  Int       m_conformanceWindowMode;
108  Int       m_confWinLeft;
109  Int       m_confWinRight;
110  Int       m_confWinTop;
111  Int       m_confWinBottom;
112  Int       m_framesToBeEncoded;                              ///< number of encoded frames
113  Int       m_aiPad[2];                                       ///< number of padded pixels for width and height
114#endif 
115#if AUXILIARY_PICTURES
116  ChromaFormat m_InputChromaFormatIDC;
117#endif
118  Bool      m_isField;                                        ///< enable field coding
119  Bool      m_isTopFieldFirst;
120
121  // profile/level
122#if SVC_EXTENSION && MULTIPLE_PTL_SUPPORT
123  Int           m_numPTLInfo;
124  Int           m_layerPTLIdx[MAX_VPS_LAYER_ID_PLUS1]; ///< scalability_mask
125  Profile::Name m_profileList[MAX_NUM_LAYER_IDS + 1];
126  Level::Tier   m_levelTierList[MAX_NUM_LAYER_IDS + 1];
127  Level::Name   m_levelList[MAX_NUM_LAYER_IDS + 1];
128  Profile::Name m_profileCompatibility[MAX_NUM_LAYER_IDS + 1];
129  Bool          m_progressiveSourceFlagList[MAX_NUM_LAYER_IDS + 1];
130  Bool          m_interlacedSourceFlagList[MAX_NUM_LAYER_IDS + 1];
131  Bool          m_nonPackedConstraintFlagList[MAX_NUM_LAYER_IDS + 1];
132  Bool          m_frameOnlyConstraintFlagList[MAX_NUM_LAYER_IDS + 1];
133
134  std::vector< std::vector<Int> > m_listOfLayerPTLofOlss;
135#else
136  Profile::Name m_profile;
137  Level::Tier   m_levelTier;
138  Level::Name   m_level;
139  Bool m_progressiveSourceFlag;
140  Bool m_interlacedSourceFlag;
141  Bool m_nonPackedConstraintFlag;
142  Bool m_frameOnlyConstraintFlag;
143#endif
144
145  // coding structure
146#if !SVC_EXTENSION
147  Int       m_iIntraPeriod;                                   ///< period of I-slice (random access period)
148#endif
149  Int       m_iDecodingRefreshType;                           ///< random access type
150  Int       m_iGOPSize;                                       ///< GOP size of hierarchical structure
151
152#if !Q0108_TSA_STSA
153  Int       m_extraRPSs;                                      ///< extra RPSs added to handle CRA
154#else
155  Int       m_extraRPSs[MAX_LAYERS];                          ///< extra RPSs added to handle CRA
156#endif
157
158  GOPEntry  m_GOPList[MAX_GOP];                               ///< the coding structure entries from the config file
159#if Q0108_TSA_STSA
160  GOPEntry  m_EhGOPList[MAX_LAYERS][MAX_GOP];                 ///< the enhancement layer coding structure entries from the config file
161  Int       m_inheritCodingStruct[MAX_LAYERS];
162#endif
163
164  Int       m_numReorderPics[MAX_TLAYER];                     ///< total number of reorder pictures
165  Int       m_maxDecPicBuffering[MAX_TLAYER];                 ///< total number of pictures in the decoded picture buffer
166  Bool      m_useTransformSkip;                               ///< flag for enabling intra transform skipping
167  Bool      m_useTransformSkipFast;                           ///< flag for enabling fast intra transform skipping
168  Bool      m_enableAMP;
169  // coding quality
170#if !SVC_EXTENSION
171  Double    m_fQP;                                            ///< QP value of key-picture (floating point)
172  Int       m_iQP;                                            ///< QP value of key-picture (integer)
173  Char*     m_pchdQPFile;                                     ///< QP offset for each slice (initialized from external file)
174  Int*      m_aidQP;                                          ///< array of slice QP values
175#endif
176  Int       m_iMaxDeltaQP;                                    ///< max. |delta QP|
177  UInt      m_uiDeltaQpRD;                                    ///< dQP range for multi-pass slice QP optimization
178  Int       m_iMaxCuDQPDepth;                                 ///< Max. depth for a minimum CuDQPSize (0:default)
179
180  Int       m_cbQpOffset;                                     ///< Chroma Cb QP Offset (0:default)
181  Int       m_crQpOffset;                                     ///< Chroma Cr QP Offset (0:default)
182
183#if ADAPTIVE_QP_SELECTION
184  Bool      m_bUseAdaptQpSelect;
185#endif
186
187  Bool      m_bUseAdaptiveQP;                                 ///< Flag for enabling QP adaptation based on a psycho-visual model
188  Int       m_iQPAdaptationRange;                             ///< dQP range by QP adaptation
189 
190  Int       m_maxTempLayer;                                  ///< Max temporal layer
191#if Q0108_TSA_STSA
192  Int       m_EhMaxTempLayer[MAX_LAYERS];                    ///< Max temporal layer
193#endif
194
195#if !LAYER_CTB
196  // coding unit (CU) definition
197  UInt      m_uiMaxCUWidth;                                   ///< max. CU width in pixel
198  UInt      m_uiMaxCUHeight;                                  ///< max. CU height in pixel
199  UInt      m_uiMaxCUDepth;                                   ///< max. CU depth
200 
201  // transfom unit (TU) definition
202  UInt      m_uiQuadtreeTULog2MaxSize;
203  UInt      m_uiQuadtreeTULog2MinSize;
204 
205  UInt      m_uiQuadtreeTUMaxDepthInter;
206  UInt      m_uiQuadtreeTUMaxDepthIntra;
207#endif
208 
209  // coding tools (bit-depth)
210#if !O0194_DIFFERENT_BITDEPTH_EL_BL
211  Int       m_inputBitDepthY;                               ///< bit-depth of input file (luma component)
212  Int       m_inputBitDepthC;                               ///< bit-depth of input file (chroma component)
213  Int       m_outputBitDepthY;                              ///< bit-depth of output file (luma component)
214  Int       m_outputBitDepthC;                              ///< bit-depth of output file (chroma component)
215  Int       m_internalBitDepthY;                            ///< bit-depth codec operates at in luma (input/output files will be converted)
216  Int       m_internalBitDepthC;                            ///< bit-depth codec operates at in chroma (input/output files will be converted)
217#endif
218#if AUXILIARY_PICTURES
219  ChromaFormat m_chromaFormatIDC;
220#endif
221
222  // coding tools (PCM bit-depth)
223  Bool      m_bPCMInputBitDepthFlag;                          ///< 0: PCM bit-depth is internal bit-depth. 1: PCM bit-depth is input bit-depth.
224
225  // coding tool (SAO)
226  Bool      m_bUseSAO; 
227  Int       m_maxNumOffsetsPerPic;                            ///< SAO maximun number of offset per picture
228  Bool      m_saoLcuBoundary;                                 ///< SAO parameter estimation using non-deblocked pixels for LCU bottom and right boundary areas
229  // coding tools (loop filter)
230  Bool      m_bLoopFilterDisable;                             ///< flag for using deblocking filter
231  Bool      m_loopFilterOffsetInPPS;                         ///< offset for deblocking filter in 0 = slice header, 1 = PPS
232  Int       m_loopFilterBetaOffsetDiv2;                     ///< beta offset for deblocking filter
233  Int       m_loopFilterTcOffsetDiv2;                       ///< tc offset for deblocking filter
234  Bool      m_DeblockingFilterControlPresent;                 ///< deblocking filter control present flag in PPS
235  Bool      m_DeblockingFilterMetric;                         ///< blockiness metric in encoder
236 
237  // coding tools (PCM)
238  Bool      m_usePCM;                                         ///< flag for using IPCM
239  UInt      m_pcmLog2MaxSize;                                 ///< log2 of maximum PCM block size
240  UInt      m_uiPCMLog2MinSize;                               ///< log2 of minimum PCM block size
241  Bool      m_bPCMFilterDisableFlag;                          ///< PCM filter disable flag
242
243  // coding tools (encoder-only parameters)
244  Bool      m_bUseASR;                                        ///< flag for using adaptive motion search range
245  Bool      m_bUseHADME;                                      ///< flag for using HAD in sub-pel ME
246  Bool      m_useRDOQ;                                       ///< flag for using RD optimized quantization
247  Bool      m_useRDOQTS;                                     ///< flag for using RD optimized quantization for transform skip
248  Int       m_rdPenalty;                                      ///< RD-penalty for 32x32 TU for intra in non-intra slices (0: no RD-penalty, 1: RD-penalty, 2: maximum RD-penalty)
249  Int       m_iFastSearch;                                    ///< ME mode, 0 = full, 1 = diamond, 2 = PMVFAST
250  Int       m_iSearchRange;                                   ///< ME search range
251  Int       m_bipredSearchRange;                              ///< ME search range for bipred refinement
252  Bool      m_bUseFastEnc;                                    ///< flag for using fast encoder setting
253  Bool      m_bUseEarlyCU;                                    ///< flag for using Early CU setting
254  Bool      m_useFastDecisionForMerge;                        ///< flag for using Fast Decision Merge RD-Cost
255  Bool      m_bUseCbfFastMode;                              ///< flag for using Cbf Fast PU Mode Decision
256  Bool      m_useEarlySkipDetection;                         ///< flag for using Early SKIP Detection
257#if FAST_INTRA_SHVC
258  Bool      m_useFastIntraScalable;                          ///< flag for using Fast Intra Decision for Scalable HEVC
259#endif
260  Int       m_sliceMode;                                     ///< 0: no slice limits, 1 : max number of CTBs per slice, 2: max number of bytes per slice,
261                                                             ///< 3: max number of tiles per slice
262  Int       m_sliceArgument;                                 ///< argument according to selected slice mode
263  Int       m_sliceSegmentMode;                              ///< 0: no slice segment limits, 1 : max number of CTBs per slice segment, 2: max number of bytes per slice segment,
264                                                             ///< 3: max number of tiles per slice segment
265  Int       m_sliceSegmentArgument;                          ///< argument according to selected slice segment mode
266
267  Bool      m_bLFCrossSliceBoundaryFlag;  ///< 1: filter across slice boundaries 0: do not filter across slice boundaries
268  Bool      m_bLFCrossTileBoundaryFlag;   ///< 1: filter across tile boundaries  0: do not filter across tile boundaries
269  Bool      m_tileUniformSpacingFlag;
270  Int       m_numTileColumnsMinus1;
271  Int       m_numTileRowsMinus1;
272  std::vector<Int> m_tileColumnWidth;
273  std::vector<Int> m_tileRowHeight;
274#if !SVC_EXTENSION
275  Int       m_iWaveFrontSynchro; //< 0: no WPP. >= 1: WPP is enabled, the "Top right" from which inheritance occurs is this LCU offset in the line above the current.
276  Int       m_iWaveFrontSubstreams; //< If iWaveFrontSynchro, this is the number of substreams per frame (dependent tiles) or per tile (independent tiles).
277#endif
278  Bool      m_bUseConstrainedIntraPred;                       ///< flag for using constrained intra prediction
279  Int       m_decodedPictureHashSEIEnabled;                    ///< Checksum(3)/CRC(2)/MD5(1)/disable(0) acting on decoded picture hash SEI message
280  Int       m_recoveryPointSEIEnabled;
281  Int       m_bufferingPeriodSEIEnabled;
282  Int       m_pictureTimingSEIEnabled;
283  Bool      m_toneMappingInfoSEIEnabled;
284  Int       m_toneMapId;
285  Bool      m_toneMapCancelFlag;
286  Bool      m_toneMapPersistenceFlag;
287  Int       m_toneMapCodedDataBitDepth;
288  Int       m_toneMapTargetBitDepth;
289  Int       m_toneMapModelId; 
290  Int       m_toneMapMinValue;
291  Int       m_toneMapMaxValue;
292  Int       m_sigmoidMidpoint;
293  Int       m_sigmoidWidth;
294  Int       m_numPivots;
295  Int       m_cameraIsoSpeedIdc;
296  Int       m_cameraIsoSpeedValue;
297  Int       m_exposureIndexIdc;
298  Int       m_exposureIndexValue;
299  Int       m_exposureCompensationValueSignFlag;
300  Int       m_exposureCompensationValueNumerator;
301  Int       m_exposureCompensationValueDenomIdc;
302  Int       m_refScreenLuminanceWhite;
303  Int       m_extendedRangeWhiteLevel;
304  Int       m_nominalBlackLevelLumaCodeValue;
305  Int       m_nominalWhiteLevelLumaCodeValue;
306  Int       m_extendedWhiteLevelLumaCodeValue;
307  Int*      m_startOfCodedInterval;
308  Int*      m_codedPivotValue;
309  Int*      m_targetPivotValue;
310  Int       m_framePackingSEIEnabled;
311  Int       m_framePackingSEIType;
312  Int       m_framePackingSEIId;
313  Int       m_framePackingSEIQuincunx;
314  Int       m_framePackingSEIInterpretation;
315  Int       m_displayOrientationSEIAngle;
316  Int       m_temporalLevel0IndexSEIEnabled;
317  Int       m_gradualDecodingRefreshInfoEnabled;
318  Int       m_decodingUnitInfoSEIEnabled;
319#if LAYERS_NOT_PRESENT_SEI
320  Int       m_layersNotPresentSEIEnabled;
321#endif
322  Int       m_SOPDescriptionSEIEnabled;
323  Int       m_scalableNestingSEIEnabled;
324#if Q0189_TMVP_CONSTRAINTS
325  Int       m_TMVPConstraintsSEIEnabled;
326#endif
327  // weighted prediction
328  Bool      m_useWeightedPred;                    ///< Use of weighted prediction in P slices
329  Bool      m_useWeightedBiPred;                  ///< Use of bi-directional weighted prediction in B slices
330 
331  UInt      m_log2ParallelMergeLevel;                         ///< Parallel merge estimation region
332  UInt      m_maxNumMergeCand;                                ///< Max number of merge candidates
333
334  Int       m_TMVPModeId;
335  Int       m_signHideFlag;
336#if !RC_SHVC_HARMONIZATION
337  Bool      m_RCEnableRateControl;                ///< enable rate control or not
338  Int       m_RCTargetBitrate;                    ///< target bitrate when rate control is enabled
339  Int       m_RCKeepHierarchicalBit;              ///< 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation
340  Bool      m_RCLCULevelRC;                       ///< true: LCU level rate control; false: picture level rate control
341  Bool      m_RCUseLCUSeparateModel;              ///< use separate R-lambda model at LCU level
342  Int       m_RCInitialQP;                        ///< inital QP for rate control
343  Bool      m_RCForceIntraQP;                     ///< force all intra picture to use initial QP or not
344#endif
345  Int       m_useScalingListId;                               ///< using quantization matrix
346  Char*     m_scalingListFile;                                ///< quantization matrix file name
347
348  Bool      m_TransquantBypassEnableFlag;                     ///< transquant_bypass_enable_flag setting in PPS.
349  Bool      m_CUTransquantBypassFlagForce;                    ///< if transquant_bypass_enable_flag, then, if true, all CU transquant bypass flags will be set to true.
350
351  Bool      m_recalculateQPAccordingToLambda;                 ///< recalculate QP value according to the lambda value
352  Bool      m_useStrongIntraSmoothing;                        ///< enable strong intra smoothing for 32x32 blocks where the reference samples are flat
353  Int       m_activeParameterSetsSEIEnabled;
354
355  Bool      m_vuiParametersPresentFlag;                       ///< enable generation of VUI parameters
356  Bool      m_aspectRatioInfoPresentFlag;                     ///< Signals whether aspect_ratio_idc is present
357  Int       m_aspectRatioIdc;                                 ///< aspect_ratio_idc
358  Int       m_sarWidth;                                       ///< horizontal size of the sample aspect ratio
359  Int       m_sarHeight;                                      ///< vertical size of the sample aspect ratio
360  Bool      m_overscanInfoPresentFlag;                        ///< Signals whether overscan_appropriate_flag is present
361  Bool      m_overscanAppropriateFlag;                        ///< Indicates whether conformant decoded pictures are suitable for display using overscan
362  Bool      m_videoSignalTypePresentFlag;                     ///< Signals whether video_format, video_full_range_flag, and colour_description_present_flag are present
363  Int       m_videoFormat;                                    ///< Indicates representation of pictures
364  Bool      m_videoFullRangeFlag;                             ///< Indicates the black level and range of luma and chroma signals
365  Bool      m_colourDescriptionPresentFlag;                   ///< Signals whether colour_primaries, transfer_characteristics and matrix_coefficients are present
366  Int       m_colourPrimaries;                                ///< Indicates chromaticity coordinates of the source primaries
367  Int       m_transferCharacteristics;                        ///< Indicates the opto-electronic transfer characteristics of the source
368  Int       m_matrixCoefficients;                             ///< Describes the matrix coefficients used in deriving luma and chroma from RGB primaries
369  Bool      m_chromaLocInfoPresentFlag;                       ///< Signals whether chroma_sample_loc_type_top_field and chroma_sample_loc_type_bottom_field are present
370  Int       m_chromaSampleLocTypeTopField;                    ///< Specifies the location of chroma samples for top field
371  Int       m_chromaSampleLocTypeBottomField;                 ///< Specifies the location of chroma samples for bottom field
372  Bool      m_neutralChromaIndicationFlag;                    ///< Indicates that the value of all decoded chroma samples is equal to 1<<(BitDepthCr-1)
373  Bool      m_defaultDisplayWindowFlag;                       ///< Indicates the presence of the default window parameters
374  Int       m_defDispWinLeftOffset;                           ///< Specifies the left offset from the conformance window of the default window
375  Int       m_defDispWinRightOffset;                          ///< Specifies the right offset from the conformance window of the default window
376  Int       m_defDispWinTopOffset;                            ///< Specifies the top offset from the conformance window of the default window
377  Int       m_defDispWinBottomOffset;                         ///< Specifies the bottom offset from the conformance window of the default window
378  Bool      m_frameFieldInfoPresentFlag;                      ///< Indicates that pic_struct values are present in picture timing SEI messages
379  Bool      m_pocProportionalToTimingFlag;                    ///< Indicates that the POC value is proportional to the output time w.r.t. first picture in CVS
380  Int       m_numTicksPocDiffOneMinus1;                       ///< Number of ticks minus 1 that for a POC difference of one
381  Bool      m_bitstreamRestrictionFlag;                       ///< Signals whether bitstream restriction parameters are present
382  Bool      m_tilesFixedStructureFlag;                        ///< Indicates that each active picture parameter set has the same values of the syntax elements related to tiles
383  Bool      m_motionVectorsOverPicBoundariesFlag;             ///< Indicates that no samples outside the picture boundaries are used for inter prediction
384  Int       m_minSpatialSegmentationIdc;                      ///< Indicates the maximum size of the spatial segments in the pictures in the coded video sequence
385  Int       m_maxBytesPerPicDenom;                            ///< Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units associated with any coded picture
386  Int       m_maxBitsPerMinCuDenom;                           ///< Indicates an upper bound for the number of bits of coding_unit() data
387  Int       m_log2MaxMvLengthHorizontal;                      ///< Indicate the maximum absolute value of a decoded horizontal MV component in quarter-pel luma units
388  Int       m_log2MaxMvLengthVertical;                        ///< Indicate the maximum absolute value of a decoded vertical MV component in quarter-pel luma units
389#if O0153_ALT_OUTPUT_LAYER_FLAG
390  Bool      m_altOutputLayerFlag;                             ///< Specifies the value of alt_output_laye_flag in VPS extension
391#endif
392
393#if SVC_EXTENSION
394  Int       m_elRapSliceBEnabled;
395#endif
396#if Q0074_COLOUR_REMAPPING_SEI
397#if !SVC_EXTENSION
398  string    m_colourRemapSEIFile;
399  Int       m_colourRemapSEIId;
400  Bool      m_colourRemapSEICancelFlag;
401  Bool      m_colourRemapSEIPersistenceFlag;
402  Bool      m_colourRemapSEIVideoSignalInfoPresentFlag;
403  Bool      m_colourRemapSEIFullRangeFlag;
404  Int       m_colourRemapSEIPrimaries;
405  Int       m_colourRemapSEITransferFunction;
406  Int       m_colourRemapSEIMatrixCoefficients;
407  Int       m_colourRemapSEIInputBitDepth;
408  Int       m_colourRemapSEIBitDepth;
409  Int       m_colourRemapSEIPreLutNumValMinus1[3];
410  Int*      m_colourRemapSEIPreLutCodedValue[3];
411  Int*      m_colourRemapSEIPreLutTargetValue[3];
412  Bool      m_colourRemapSEIMatrixPresentFlag;
413  Int       m_colourRemapSEILog2MatrixDenom;
414  Int       m_colourRemapSEICoeffs[3][3];
415  Int       m_colourRemapSEIPostLutNumValMinus1[3];
416  Int*      m_colourRemapSEIPostLutCodedValue[3];
417  Int*      m_colourRemapSEIPostLutTargetValue[3];
418#endif
419#endif
420  // internal member functions
421#if LAYER_CTB
422  Void  xSetGlobal      (UInt layerId);                       ///< set global variables
423#else
424  Void  xSetGlobal      ();                                   ///< set global variables
425#endif
426  Void  xCheckParameter ();                                   ///< check validity of configuration values
427  Void  xPrintParameter ();                                   ///< print configuration values
428  Void  xPrintUsage     ();                                   ///< print usage
429#if SVC_EXTENSION
430#if M0040_ADAPTIVE_RESOLUTION_CHANGE
431  Int       m_adaptiveResolutionChange;                       ///< Indicate adaptive resolution change frame
432#endif
433#if HIGHER_LAYER_IRAP_SKIP_FLAG
434  Bool      m_skipPictureAtArcSwitch;                         ///< Indicates that when ARC up-switching is performed the higher layer picture is a skip picture
435#endif
436#if REPN_FORMAT_IN_VPS
437  RepFormatCfg m_repFormatCfg[16];                            ///< Rep_format structures
438#endif
439#if N0383_IL_CONSTRAINED_TILE_SETS_SEI
440  Bool      m_interLayerConstrainedTileSetsSEIEnabled;
441  UInt      m_ilNumSetsInMessage;
442  Bool      m_skippedTileSetPresentFlag;
443  UInt      m_topLeftTileIndex[1024];
444  UInt      m_bottomRightTileIndex[1024];
445  UInt      m_ilcIdc[1024];
446#endif
447#if O0215_PHASE_ALIGNMENT
448  Bool      m_phaseAlignFlag;
449#endif
450#if O0223_PICTURE_TYPES_ALIGN_FLAG
451  Bool      m_crossLayerPictureTypeAlignFlag;
452#endif
453  Bool      m_crossLayerIrapAlignFlag;
454#if P0050_KNEE_FUNCTION_SEI
455  Bool      m_kneeSEIEnabled;
456  Int       m_kneeSEIId;
457  Bool      m_kneeSEICancelFlag;
458  Bool      m_kneeSEIPersistenceFlag;
459  Bool      m_kneeSEIMappingFlag;
460  Int       m_kneeSEIInputDrange;
461  Int       m_kneeSEIInputDispLuminance;
462  Int       m_kneeSEIOutputDrange;
463  Int       m_kneeSEIOutputDispLuminance;
464  Int       m_kneeSEINumKneePointsMinus1;
465  Int*      m_kneeSEIInputKneePoint;
466  Int*      m_kneeSEIOutputKneePoint;
467#endif
468#if Q0096_OVERLAY_SEI
469  Bool                                m_overlaySEIEnabled;
470  Bool                                m_overlayInfoCancelFlag;
471  UInt                                m_overlayContentAuxIdMinus128;
472  UInt                                m_overlayLabelAuxIdMinus128;
473  UInt                                m_overlayAlphaAuxIdMinus128;
474  UInt                                m_overlayElementLabelValueLengthMinus8;
475  UInt                                m_numOverlaysMinus1;
476  std::vector<UInt>                   m_overlayIdx; 
477  std::vector<Bool>                   m_overlayLanguagePresentFlag;
478  std::vector<UInt>                   m_overlayContentLayerId;
479  std::vector<Bool>                   m_overlayLabelPresentFlag;
480  std::vector<UInt>                   m_overlayLabelLayerId;
481  std::vector<Bool>                   m_overlayAlphaPresentFlag;
482  std::vector<UInt>                   m_overlayAlphaLayerId;
483  std::vector<UInt>                   m_numOverlayElementsMinus1;
484  std::vector< std::vector<UInt> >    m_overlayElementLabelMin;
485  std::vector< std::vector<UInt> >    m_overlayElementLabelMax;
486  std::vector<string>                 m_overlayLanguage; 
487  std::vector<string>                 m_overlayName; 
488  std::vector< std::vector<string> >  m_overlayElementName; 
489  Bool                                m_overlayInfoPersistenceFlag;
490#endif
491#if P0068_CROSS_LAYER_ALIGNED_IDR_ONLY_FOR_IRAP_FLAG
492  Bool      m_crossLayerAlignedIdrOnlyFlag;
493#endif
494#if O0149_CROSS_LAYER_BLA_FLAG
495  Bool      m_crossLayerBLAFlag;
496#endif
497#if O0194_WEIGHTED_PREDICTION_CGS
498  Bool      m_useInterLayerWeightedPred;
499#endif
500#if Q0048_CGS_3D_ASYMLUT
501  Int  m_nCGSFlag;
502  Int  m_nCGSMaxOctantDepth;
503  Int  m_nCGSMaxYPartNumLog2;
504  Int  m_nCGSLUTBit;
505#if R0151_CGS_3D_ASYMLUT_IMPROVE
506  Int  m_nCGSAdaptiveChroma;
507#endif
508#if R0179_ENC_OPT_3DLUT_SIZE
509  Int  m_nCGSLutSizeRDO;
510#endif
511#endif
512#endif //SVC_EXTENSION
513public:
514  TAppEncCfg();
515  virtual ~TAppEncCfg();
516 
517public:
518  Void  create    ();                                         ///< create option handling class
519  Void  destroy   ();                                         ///< destroy option handling class
520  Bool  parseCfg  ( Int argc, Char* argv[] );                 ///< parse configuration file to fill member variables
521 
522#if SVC_EXTENSION
523  Int  getNumFrameToBeEncoded()    {return m_framesToBeEncoded; }
524  Int  getNumLayer()               {return m_numLayers;        }
525  Int  getGOPSize()                {return m_iGOPSize;          }
526#if O0194_DIFFERENT_BITDEPTH_EL_BL
527  UInt getInternalBitDepthY(Int iLayer)      {return m_acLayerCfg[iLayer].m_internalBitDepthY; }
528  UInt getInternalBitDepthC(Int iLayer)      {return m_acLayerCfg[iLayer].m_internalBitDepthC; }
529  Bool getPCMInputBitDepthFlag()             {return m_bPCMInputBitDepthFlag;                  }
530#else
531  UInt getInternalBitDepthY()      {return m_internalBitDepthY; }
532  UInt getInternalBitDepthC()      {return m_internalBitDepthC; }
533#endif
534#if !LAYER_CTB
535  UInt getMaxCUWidth()             {return m_uiMaxCUWidth;      }
536  UInt getMaxCUHeight()            {return m_uiMaxCUHeight;     }
537  UInt getMaxCUDepth()             {return m_uiMaxCUDepth;      }
538#endif
539  Int  getDecodingRefreshType()    {return m_iDecodingRefreshType; }
540  Int  getWaveFrontSynchro(Int layerId)        { return m_acLayerCfg[layerId].m_waveFrontSynchro; }
541  Void getDirFilename(string& filename, string& dir, const string path);
542#if OUTPUT_LAYER_SETS_CONFIG
543  Bool scanStringToArray(string const cfgString, Int const numEntries, const char* logString, Int * const returnArray);
544  Bool scanStringToArray(string const cfgString, Int const numEntries, const char* logString, std::vector<Int> &  returnVector);
545  Void cfgStringToArray(Int **arr, string const cfgString, Int const numEntries, const char* logString);
546#else
547  Void cfgStringToArray(Int **arr, string cfgString, Int numEntries, const char* logString);
548#endif
549#if REPN_FORMAT_IN_VPS
550  RepFormatCfg* getRepFormatCfg(Int i)  { return &m_repFormatCfg[i]; }
551#endif
552#if LAYER_CTB
553  Bool getUsePCM()                  { return m_usePCM;               }
554  UInt getPCMLog2MinSize  ()        { return  m_uiPCMLog2MinSize;    }
555#endif
556#endif
557};// END CLASS DEFINITION TAppEncCfg
558
559//! \}
560
561#endif // __TAPPENCCFG__
562
Note: See TracBrowser for help on using the repository browser.