enumExtendedProfileName// this is used for determining profile strings, where multiple profiles map to a single profile idc with various constraint flag combinations
{
NONE=0,
MAIN=1,
MAIN10=2,
MAINSTILLPICTURE=3,
MAINREXT=4,
HIGHTHROUGHPUTREXT=5,// Placeholder profile for development
// The following are RExt profiles, which would map to the MAINREXT profile idc.
// The enumeration indicates the bit-depth constraint in the bottom 2 digits
// the chroma format in the next digit
// the intra constraint in the top digit
MONOCHROME_8=1008,
MONOCHROME_12=1012,
MONOCHROME_16=1016,
MAIN_12=1112,
MAIN_422_10=1210,
MAIN_422_12=1212,
MAIN_444=1308,
MAIN_444_10=1310,
MAIN_444_12=1312,
MAIN_444_16=1316,// non-standard profile definition, used for development purposes
("InputBitDepth",m_inputBitDepth[CHANNEL_TYPE_LUMA],8,"Bit-depth of input file")
("OutputBitDepth",m_outputBitDepth[CHANNEL_TYPE_LUMA],0,"Bit-depth of output file (default:InternalBitDepth)")
("MSBExtendedBitDepth",m_MSBExtendedBitDepth[CHANNEL_TYPE_LUMA],0,"bit depth of luma component after addition of MSBs of value 0 (used for synthesising High Dynamic Range source material). (default:InputBitDepth)")
("InternalBitDepth",m_internalBitDepth[CHANNEL_TYPE_LUMA],0,"Bit-depth the codec operates at. (default:MSBExtendedBitDepth). If different to MSBExtendedBitDepth, source data will be converted")
("InputBitDepthC",m_inputBitDepth[CHANNEL_TYPE_CHROMA],0,"As per InputBitDepth but for chroma component. (default:InputBitDepth)")
("OutputBitDepthC",m_outputBitDepth[CHANNEL_TYPE_CHROMA],0,"As per OutputBitDepth but for chroma component. (default:InternalBitDepthC)")
("MSBExtendedBitDepthC",m_MSBExtendedBitDepth[CHANNEL_TYPE_CHROMA],0,"As per MSBExtendedBitDepth but for chroma component. (default:MSBExtendedBitDepth)")
("InternalBitDepthC",m_internalBitDepth[CHANNEL_TYPE_CHROMA],0,"As per InternalBitDepth but for chroma component. (default:InternalBitDepth)")
("ExtendedPrecision",m_useExtendedPrecision,false,"Increased internal accuracies to support high bit depths (not valid in V1 profiles)")
("HighPrecisionPredictionWeighting",m_useHighPrecisionPredictionWeighting,false,"Use high precision option for weighted prediction (not valid in V1 profiles)")
("InputColourSpaceConvert",inputColourSpaceConvert,string(""),"Colour space conversion to apply to input video. Permitted values are (empty string=UNCHANGED) "+getListOfColourSpaceConverts(true))
("SNRInternalColourSpace",m_snrInternalColourSpace,false,"If true, then no colour space conversion is applied prior to SNR, otherwise inverse of input is applied.")
("OutputInternalColourSpace",m_outputInternalColourSpace,false,"If true, then no colour space conversion is applied for reconstructed video, otherwise inverse of input is applied.")
("MSEBasedSequencePSNR",m_printMSEBasedSequencePSNR,false,"0 (default) emit sequence PSNR only as a linear average of the frame PSNRs, 1 = also emit a sequence PSNR based on an average of the frame MSEs")
("PrintFrameMSE",m_printFrameMSE,false,"0 (default) emit only bit count and PSNRs for each frame, 1 = also emit MSE values")
("PrintSequenceMSE",m_printSequenceMSE,false,"0 (default) emit only bit rate and PSNRs for the whole sequence, 1 = also emit MSE values")
("CabacZeroWordPaddingEnabled",m_cabacZeroWordPaddingEnabled,false,"0 (default) do not add conforming cabac-zero-words to bit streams, 1 = add cabac-zero-words")
("ChromaFormatIDC,-cf",tmpChromaFormat,0,"ChromaFormatIDC (400|420|422|444 or set 0 (default) for same as InputChromaFormat)")
("ConformanceMode",m_conformanceWindowMode,0,"Deprecated alias of ConformanceWindowMode")
("ConformanceWindowMode",m_conformanceWindowMode,0,"Window conformance mode (0: no window, 1:automatic padding, 2:padding, 3:conformance")
("HorizontalPadding,-pdx",m_aiPad[0],0,"Horizontal source padding for conformance window mode 2")
("VerticalPadding,-pdy",m_aiPad[1],0,"Vertical source padding for conformance window mode 2")
("ConfLeft",m_confWinLeft,0,"Deprecated alias of ConfWinLeft")
("ConfRight",m_confWinRight,0,"Deprecated alias of ConfWinRight")
("ConfTop",m_confWinTop,0,"Deprecated alias of ConfWinTop")
("ConfBottom",m_confWinBottom,0,"Deprecated alias of ConfWinBottom")
("ConfWinLeft",m_confWinLeft,0,"Left offset for window conformance mode 3")
("ConfWinRight",m_confWinRight,0,"Right offset for window conformance mode 3")
("ConfWinTop",m_confWinTop,0,"Top offset for window conformance mode 3")
("ConfWinBottom",m_confWinBottom,0,"Bottom offset for window conformance mode 3")
("FrameRate,-fr",m_iFrameRate,0,"Frame rate")
("FrameSkip,-fs",m_FrameSkip,0u,"Number of frames to skip at start of input YUV")
("FramesToBeEncoded,f",m_framesToBeEncoded,0,"Number of frames to be encoded (default=all)")
//Field coding parameters
("FieldCoding",m_isField,false,"Signals if it's a field based coding")
("TopFieldFirst, Tff",m_isTopFieldFirst,false,"In case of field based coding, signals whether if it's a top field first or not")
// Profile and level
("Profile",extendedProfile,NONE,"Profile name to use for encoding. Use main (for main), main10 (for main10), main-still-picture, main-RExt (for Range Extensions profile), any of the RExt specific profile names, or none")
("Level",m_level,Level::NONE,"Level limit to be used, eg 5.1, or none")
("Tier",m_levelTier,Level::MAIN,"Tier to use for interpretation of --Level (main or high only)")
("MaxBitDepthConstraint",m_bitDepthConstraint,0u,"Bit depth to use for profile-constraint for RExt profiles. 0=automatically choose based upon other parameters")
("MaxChromaFormatConstraint",tmpConstraintChromaFormat,0,"Chroma-format to use for the profile-constraint for RExt profiles. 0=automatically choose based upon other parameters")
("IntraConstraintFlag",m_intraConstraintFlag,false,"Value of general_intra_constraint_flag to use for RExt profiles (not used if an explicit RExt sub-profile is specified)")
("LowerBitRateConstraintFlag",m_lowerBitRateConstraintFlag,true,"Value of general_lower_bit_rate_constraint_flag to use for RExt profiles")
("ProgressiveSource",m_progressiveSourceFlag,false,"Indicate that source is progressive")
("InterlacedSource",m_interlacedSourceFlag,false,"Indicate that source is interlaced")
("NonPackedSource",m_nonPackedConstraintFlag,false,"Indicate that source does not contain frame packing")
("FrameOnly",m_frameOnlyConstraintFlag,false,"Indicate that the bitstream contains only frames")
// Unit definition parameters
("MaxCUWidth",m_uiMaxCUWidth,64u)
("MaxCUHeight",m_uiMaxCUHeight,64u)
// todo: remove defaults from MaxCUSize
("MaxCUSize,s",m_uiMaxCUWidth,64u,"Maximum CU size")
("MaxCUSize,s",m_uiMaxCUHeight,64u,"Maximum CU size")
("CrossComponentPrediction",m_useCrossComponentPrediction,false,"Enable the use of cross-component prediction (not valid in V1 profiles)")
("ReconBasedCrossCPredictionEstimate",m_reconBasedCrossCPredictionEstimate,false,"When determining the alpha value for cross-component prediction, use the decoded residual rather than the pre-transform encoder-side residual")
("SaoLumaOffsetBitShift",saoOffsetBitShift[CHANNEL_TYPE_LUMA],0,"Specify the luma SAO bit-shift. If negative, automatically calculate a suitable value based upon bit depth and initial QP")
("SaoChromaOffsetBitShift",saoOffsetBitShift[CHANNEL_TYPE_CHROMA],0,"Specify the chroma SAO bit-shift. If negative, automatically calculate a suitable value based upon bit depth and initial QP")
("TransformSkipFast",m_useTransformSkipFast,false,"Fast intra transform skipping")
("TransformSkipLog2MaxSize",m_transformSkipLog2MaxSize,2U,"Specify transform-skip maximum size. Minimum 2. (not valid in V1 profiles)")
("ImplicitResidualDPCM",m_useResidualDPCM[RDPCM_SIGNAL_IMPLICIT],false,"Enable implicitly signalled residual DPCM for intra (also known as sample-adaptive intra predict) (not valid in V1 profiles)")
("ExplicitResidualDPCM",m_useResidualDPCM[RDPCM_SIGNAL_EXPLICIT],false,"Enable explicitly signalled residual DPCM for inter (not valid in V1 profiles)")
("ResidualRotation",m_useResidualRotation,false,"Enable rotation of transform-skipped and transquant-bypassed TUs through 180 degrees prior to entropy coding (not valid in V1 profiles)")
("SingleSignificanceMapContext",m_useSingleSignificanceMapContext,false,"Enable, for transform-skipped and transquant-bypassed TUs, the selection of a single significance map context variable for all coefficients (not valid in V1 profiles)")
("GolombRiceParameterAdaptation",m_useGolombRiceParameterAdaptation,false,"Enable the adaptation of the Golomb-Rice parameter over the course of each slice")
("AlignCABACBeforeBypass",m_alignCABACBeforeBypass,false,"Align the CABAC engine to a defined fraction of a bit prior to coding bypass data. Must be 1 in high bit rate profile, 0 otherwise")
("MaxNumOffsetsPerPic",m_maxNumOffsetsPerPic,2048,"Max number of SAO offset per picture (Default: 2048)")
("SAOLcuBoundary",m_saoCtuBoundary,false,"0: right/bottom CTU boundary areas skipped from SAO parameter estimation, 1: non-deblocked pixels are used for those areas")
("SliceMode",m_sliceMode,0,"0: Disable all Recon slice limits, 1: Enforce max # of CTUs, 2: Enforce max # of bytes, 3:specify tiles per dependent slice")
("SliceArgument",m_sliceArgument,0,"Depending on SliceMode being:"
"\t1: max number of CTUs per slice"
"\t2: max number of bytes per slice"
"\t3: max number of tiles per slice")
("SliceSegmentMode",m_sliceSegmentMode,0,"0: Disable all slice segment limits, 1: Enforce max # of CTUs, 2: Enforce max # of bytes, 3:specify tiles per dependent slice")
("SliceSegmentArgument",m_sliceSegmentArgument,0,"Depending on SliceSegmentMode being:"
("IntraReferenceSmoothing",m_enableIntraReferenceSmoothing,true,"0: Disable use of intra reference smoothing. 1: Enable use of intra reference smoothing (not valid in V1 profiles)")
("WeightedPredP,-wpP",m_useWeightedPred,false,"Use weighted prediction in P slices")
("WeightedPredB,-wpB",m_useWeightedBiPred,false,"Use weighted (bidirectional) prediction in B slices")
("KeepHierarchicalBit",m_RCKeepHierarchicalBit,0,"Rate control: 0: equal bit allocation; 1: fixed ratio bit allocation; 2: adaptive ratio bit allocation")
("RCForceIntraQP",m_RCForceIntraQP,false,"Rate control: force intra QP to be equal to initial QP")
("TransquantBypassEnableFlag",m_TransquantBypassEnableFlag,false,"transquant_bypass_enable_flag indicator in PPS")
("CUTransquantBypassFlagForce",m_CUTransquantBypassFlagForce,false,"Force transquant bypass mode, when transquant_bypass_enable_flag is enabled")
("CostMode",m_costMode,COST_STANDARD_LOSSY,"Use alternative cost functions: choose between 'lossy', 'sequence_level_lossless', 'lossless' (which forces QP to "MACRO_TO_STRING(LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP)") and 'mixed_lossless_lossy' (which used QP'="MACRO_TO_STRING(LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP_PRIME)" for pre-estimates of transquant-bypass blocks).")
("RecalculateQPAccordingToLambda",m_recalculateQPAccordingToLambda,false,"Recalculate QP values according to lambda values. Do not suggest to be enabled in all intra case")
("StrongIntraSmoothing,-sis",m_useStrongIntraSmoothing,true,"Enable strong intra smoothing for 32x32 blocks")
("SEIActiveParameterSets",m_activeParameterSetsSEIEnabled,0,"Enable generation of active parameter sets SEI messages")
("VuiParametersPresent,-vui",m_vuiParametersPresentFlag,false,"Enable generation of vui_parameters()")
("AspectRatioInfoPresent",m_aspectRatioInfoPresentFlag,false,"Signals whether aspect_ratio_idc is present")
("SarWidth",m_sarWidth,0,"horizontal size of the sample aspect ratio")
("SarHeight",m_sarHeight,0,"vertical size of the sample aspect ratio")
("OverscanInfoPresent",m_overscanInfoPresentFlag,false,"Indicates whether conformant decoded pictures are suitable for display using overscan\n")
("OverscanAppropriate",m_overscanAppropriateFlag,false,"Indicates whether conformant decoded pictures are suitable for display using overscan\n")
("VideoSignalTypePresent",m_videoSignalTypePresentFlag,false,"Signals whether video_format, video_full_range_flag, and colour_description_present_flag are present")
("VideoFormat",m_videoFormat,5,"Indicates representation of pictures")
("VideoFullRange",m_videoFullRangeFlag,false,"Indicates the black level and range of luma and chroma signals")
("ColourDescriptionPresent",m_colourDescriptionPresentFlag,false,"Signals whether colour_primaries, transfer_characteristics and matrix_coefficients are present")
("ColourPrimaries",m_colourPrimaries,2,"Indicates chromaticity coordinates of the source primaries")
("TransferCharacteristics",m_transferCharacteristics,2,"Indicates the opto-electronic transfer characteristics of the source")
("MatrixCoefficients",m_matrixCoefficients,2,"Describes the matrix coefficients used in deriving luma and chroma from RGB primaries")
("ChromaLocInfoPresent",m_chromaLocInfoPresentFlag,false,"Signals whether chroma_sample_loc_type_top_field and chroma_sample_loc_type_bottom_field are present")
("ChromaSampleLocTypeTopField",m_chromaSampleLocTypeTopField,0,"Specifies the location of chroma samples for top field")
("ChromaSampleLocTypeBottomField",m_chromaSampleLocTypeBottomField,0,"Specifies the location of chroma samples for bottom field")
("NeutralChromaIndication",m_neutralChromaIndicationFlag,false,"Indicates that the value of all decoded chroma samples is equal to 1<<(BitDepthCr-1)")
("DefaultDisplayWindowFlag",m_defaultDisplayWindowFlag,false,"Indicates the presence of the Default Window parameters")
("DefDispWinLeftOffset",m_defDispWinLeftOffset,0,"Specifies the left offset of the default display window from the conformance window")
("DefDispWinRightOffset",m_defDispWinRightOffset,0,"Specifies the right offset of the default display window from the conformance window")
("DefDispWinTopOffset",m_defDispWinTopOffset,0,"Specifies the top offset of the default display window from the conformance window")
("DefDispWinBottomOffset",m_defDispWinBottomOffset,0,"Specifies the bottom offset of the default display window from the conformance window")
("FrameFieldInfoPresentFlag",m_frameFieldInfoPresentFlag,false,"Indicates that pic_struct and field coding related values are present in picture timing SEI messages")
("PocProportionalToTimingFlag",m_pocProportionalToTimingFlag,false,"Indicates that the POC value is proportional to the output time w.r.t. first picture in CVS")
("NumTicksPocDiffOneMinus1",m_numTicksPocDiffOneMinus1,0,"Number of ticks minus 1 that for a POC difference of one")
("BitstreamRestriction",m_bitstreamRestrictionFlag,false,"Signals whether bitstream restriction parameters are present")
("TilesFixedStructure",m_tilesFixedStructureFlag,false,"Indicates that each active picture parameter set has the same values of the syntax elements related to tiles")
("MotionVectorsOverPicBoundaries",m_motionVectorsOverPicBoundariesFlag,false,"Indicates that no samples outside the picture boundaries are used for inter prediction")
("MaxBytesPerPicDenom",m_maxBytesPerPicDenom,2,"Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units associated with any coded picture")
("MaxBitsPerMinCuDenom",m_maxBitsPerMinCuDenom,1,"Indicates an upper bound for the number of bits of coding_unit() data")
("Log2MaxMvLengthHorizontal",m_log2MaxMvLengthHorizontal,15,"Indicate the maximum absolute value of a decoded horizontal MV component in quarter-pel luma units")
("Log2MaxMvLengthVertical",m_log2MaxMvLengthVertical,15,"Indicate the maximum absolute value of a decoded vertical MV component in quarter-pel luma units")
("SEIRecoveryPoint",m_recoveryPointSEIEnabled,0,"Control generation of recovery point SEI messages")
("SEIBufferingPeriod",m_bufferingPeriodSEIEnabled,0,"Control generation of buffering period SEI messages")
("SEIPictureTiming",m_pictureTimingSEIEnabled,0,"Control generation of picture timing SEI messages")
("SEIToneMappingInfo",m_toneMappingInfoSEIEnabled,false,"Control generation of Tone Mapping SEI messages")
("SEIToneMapId",m_toneMapId,0,"Specifies Id of Tone Mapping SEI message for a given session")
("SEIToneMapCancelFlag",m_toneMapCancelFlag,false,"Indicates that Tone Mapping SEI message cancels the persistence or follows")
("SEIToneMapPersistenceFlag",m_toneMapPersistenceFlag,true,"Specifies the persistence of the Tone Mapping SEI message")
("SEIToneMapCodedDataBitDepth",m_toneMapCodedDataBitDepth,8,"Specifies Coded Data BitDepth of Tone Mapping SEI messages")
("SEIToneMapTargetBitDepth",m_toneMapTargetBitDepth,8,"Specifies Output BitDepth of Tone mapping function")
("SEIToneMapModelId",m_toneMapModelId,0,"Specifies Model utilized for mapping coded data into target_bit_depth range\n"
"\t0: linear mapping with clipping\n"
"\t1: sigmoidal mapping\n"
"\t2: user-defined table mapping\n"
"\t3: piece-wise linear mapping\n"
"\t4: luminance dynamic range information ")
("SEIToneMapMinValue",m_toneMapMinValue,0,"Specifies the minimum value in mode 0")
("SEIToneMapMaxValue",m_toneMapMaxValue,1023,"Specifies the maximum value in mode 0")
("SEIToneMapSigmoidMidpoint",m_sigmoidMidpoint,512,"Specifies the centre point in mode 1")
("SEIToneMapSigmoidWidth",m_sigmoidWidth,960,"Specifies the distance between 5% and 95% values of the target_bit_depth in mode 1")
("SEIToneMapStartOfCodedInterval",cfg_startOfCodedInterval,cfg_startOfCodedInterval,"Array of user-defined mapping table")
("SEIToneMapNumPivots",m_numPivots,0,"Specifies the number of pivot points in mode 3")
("SEIToneMapCodedPivotValue",cfg_codedPivotValue,cfg_codedPivotValue,"Array of pivot point")
("SEIToneMapTargetPivotValue",cfg_targetPivotValue,cfg_targetPivotValue,"Array of pivot point")
("SEIToneMapCameraIsoSpeedIdc",m_cameraIsoSpeedIdc,0,"Indicates the camera ISO speed for daylight illumination")
("SEIToneMapCameraIsoSpeedValue",m_cameraIsoSpeedValue,400,"Specifies the camera ISO speed for daylight illumination of Extended_ISO")
("SEIToneMapExposureIndexIdc",m_exposureIndexIdc,0,"Indicates the exposure index setting of the camera")
("SEIToneMapExposureIndexValue",m_exposureIndexValue,400,"Specifies the exposure index setting of the camera of Extended_ISO")
("SEIToneMapExposureCompensationValueSignFlag",m_exposureCompensationValueSignFlag,0,"Specifies the sign of ExposureCompensationValue")
("SEIToneMapExposureCompensationValueNumerator",m_exposureCompensationValueNumerator,0,"Specifies the numerator of ExposureCompensationValue")
("SEIToneMapExposureCompensationValueDenomIdc",m_exposureCompensationValueDenomIdc,2,"Specifies the denominator of ExposureCompensationValue")
("SEIToneMapRefScreenLuminanceWhite",m_refScreenLuminanceWhite,350,"Specifies reference screen brightness setting in units of candela per square metre")
("SEIToneMapExtendedRangeWhiteLevel",m_extendedRangeWhiteLevel,800,"Indicates the luminance dynamic range")
("SEIToneMapNominalBlackLevelLumaCodeValue",m_nominalBlackLevelLumaCodeValue,16,"Specifies luma sample value of the nominal black level assigned decoded pictures")
("SEIToneMapNominalWhiteLevelLumaCodeValue",m_nominalWhiteLevelLumaCodeValue,235,"Specifies luma sample value of the nominal white level assigned decoded pictures")
("SEIToneMapExtendedWhiteLevelLumaCodeValue",m_extendedWhiteLevelLumaCodeValue,300,"Specifies luma sample value of the extended dynamic range assigned decoded pictures")
("SEIChromaSamplingFilterHint",m_chromaSamplingFilterSEIenabled,false,"Control generation of the chroma sampling filter hint SEI message")
("SEIChromaSamplingHorizontalFilterType",m_chromaSamplingHorFilterIdc,2,"Defines the Index of the chroma sampling horizontal filter\n"
"\t0: unspecified - Chroma filter is unknown or is determined by the application"
"\t1: User-defined - Filter coefficients are specified in the chroma sampling filter hint SEI message"
"\t3: side by side - frames are displayed horizontally\n"
"\t4: top bottom - frames are displayed vertically\n"
"\t5: frame alternation - one frame is alternated with the other")
("SEIFramePackingId",m_framePackingSEIId,0,"Id of frame packing SEI message for a given session")
("SEIFramePackingQuincunx",m_framePackingSEIQuincunx,0,"Indicate the presence of a Quincunx type video frame")
("SEIFramePackingInterpretation",m_framePackingSEIInterpretation,0,"Indicate the interpretation of the frame pair\n"
"\t0: unspecified\n"
"\t1: stereo pair, frame0 represents left view\n"
"\t2: stereo pair, frame0 represents right view")
("SEISegmentedRectFramePacking",m_segmentedRectFramePackingSEIEnabled,0,"Controls generation of segmented rectangular frame packing SEI messages")
("SEISegmentedRectFramePackingCancel",m_segmentedRectFramePackingSEICancel,false,"If equal to 1, cancels the persistence of any previous SRFPA SEI message")
("SEISegmentedRectFramePackingType",m_segmentedRectFramePackingSEIType,0,"Specifies the arrangement of the frames in the reconstructed picture")
("SEISegmentedRectFramePackingPersistence",m_segmentedRectFramePackingSEIPersistence,false,"If equal to 0, the SEI applies to the current frame only")
("SEIDisplayOrientation",m_displayOrientationSEIAngle,0,"Control generation of display orientation SEI messages\n"
"\tN: 0 < N < (2^16 - 1) enable display orientation SEI message with anticlockwise_rotation = N and display_orientation_repetition_period = 1\n"
"\t0: disable")
("SEITemporalLevel0Index",m_temporalLevel0IndexSEIEnabled,0,"Control generation of temporal level 0 index SEI messages")
("SEIGradualDecodingRefreshInfo",m_gradualDecodingRefreshInfoEnabled,0,"Control generation of gradual decoding refresh information SEI message")
("SEINoDisplay",m_noDisplaySEITLayer,0,"Control generation of no display SEI message\n"
"\tN: 0 < N enable no display SEI message for temporal layer N or higher\n"
"\t0: disable")
("SEIDecodingUnitInfo",m_decodingUnitInfoSEIEnabled,0,"Control generation of decoding unit information SEI message.")
("SEISOPDescription",m_SOPDescriptionSEIEnabled,0,"Control generation of SOP description SEI messages")
("SEIScalableNesting",m_scalableNestingSEIEnabled,0,"Control generation of scalable nesting SEI messages")
("SEITempMotionConstrainedTileSets",m_tmctsSEIEnabled,false,"Control generation of temporal motion constrained tile sets SEI message")
("SEITimeCodeEnabled",m_timeCodeSEIEnabled,false,"Control generation of time code information SEI message")
("SEITimeCodeNumClockTs",m_timeCodeSEINumTs,0,"Number of clock time sets [0..3]")
("SEITimeCodeTimeStampFlag",cfg_timeCodeSeiTimeStampFlag,cfg_timeCodeSeiTimeStampFlag,"Time stamp flag associated to each time set")
("SEITimeCodeFieldBasedFlag",cfg_timeCodeSeiNumUnitFieldBasedFlag,cfg_timeCodeSeiNumUnitFieldBasedFlag,"Field based flag associated to each time set")
("SEITimeCodeCountingType",cfg_timeCodeSeiCountingType,cfg_timeCodeSeiCountingType,"Counting type associated to each time set")
("SEITimeCodeFullTsFlag",cfg_timeCodeSeiFullTimeStampFlag,cfg_timeCodeSeiFullTimeStampFlag,"Full time stamp flag associated to each time set")
("SEITimeCodeDiscontinuityFlag",cfg_timeCodeSeiDiscontinuityFlag,cfg_timeCodeSeiDiscontinuityFlag,"Discontinuity flag associated to each time set")
("SEITimeCodeCntDroppedFlag",cfg_timeCodeSeiCntDroppedFlag,cfg_timeCodeSeiCntDroppedFlag,"Counter dropped flag associated to each time set")
("SEITimeCodeNumFrames",cfg_timeCodeSeiNumberOfFrames,cfg_timeCodeSeiNumberOfFrames,"Number of frames associated to each time set")
("SEITimeCodeSecondsValue",cfg_timeCodeSeiSecondsValue,cfg_timeCodeSeiSecondsValue,"Seconds value for each time set")
("SEITimeCodeMinutesValue",cfg_timeCodeSeiMinutesValue,cfg_timeCodeSeiMinutesValue,"Minutes value for each time set")
("SEITimeCodeHoursValue",cfg_timeCodeSeiHoursValue,cfg_timeCodeSeiHoursValue,"Hours value for each time set")
("SEITimeCodeSecondsFlag",cfg_timeCodeSeiSecondsFlag,cfg_timeCodeSeiSecondsFlag,"Flag to signal seconds value presence in each time set")
("SEITimeCodeMinutesFlag",cfg_timeCodeSeiMinutesFlag,cfg_timeCodeSeiMinutesFlag,"Flag to signal minutes value presence in each time set")
("SEITimeCodeHoursFlag",cfg_timeCodeSeiHoursFlag,cfg_timeCodeSeiHoursFlag,"Flag to signal hours value presence in each time set")
("SEITimeCodeOffsetLength",cfg_timeCodeSeiTimeOffsetLength,cfg_timeCodeSeiTimeOffsetLength,"Time offset length associated to each time set")
("SEITimeCodeTimeOffset",cfg_timeCodeSeiTimeOffsetValue,cfg_timeCodeSeiTimeOffsetValue,"Time offset associated to each time set")
("SEIKneeFunctionInfo",m_kneeSEIEnabled,false,"Control generation of Knee function SEI messages")
("SEIKneeFunctionId",m_kneeSEIId,0,"Specifies Id of Knee function SEI message for a given session")
("SEIKneeFunctionCancelFlag",m_kneeSEICancelFlag,false,"Indicates that Knee function SEI message cancels the persistence or follows")
("SEIKneeFunctionPersistenceFlag",m_kneeSEIPersistenceFlag,true,"Specifies the persistence of the Knee function SEI message")
("SEIKneeFunctionInputDrange",m_kneeSEIInputDrange,1000,"Specifies the peak luminance level for the input picture of Knee function SEI messages")
("SEIKneeFunctionInputDispLuminance",m_kneeSEIInputDispLuminance,100,"Specifies the expected display brightness for the input picture of Knee function SEI messages")
("SEIKneeFunctionOutputDrange",m_kneeSEIOutputDrange,4000,"Specifies the peak luminance level for the output picture of Knee function SEI messages")
("SEIKneeFunctionOutputDispLuminance",m_kneeSEIOutputDispLuminance,800,"Specifies the expected display brightness for the output picture of Knee function SEI messages")
("SEIKneeFunctionNumKneePointsMinus1",m_kneeSEINumKneePointsMinus1,2,"Specifies the number of knee points - 1")
("SEIKneeFunctionInputKneePointValue",cfg_kneeSEIInputKneePointValue,cfg_kneeSEIInputKneePointValue,"Array of input knee point")
("SEIKneeFunctionOutputKneePointValue",cfg_kneeSEIOutputKneePointValue,cfg_kneeSEIOutputKneePointValue,"Array of output knee point")
("SEIMasteringDisplayColourVolume",m_masteringDisplay.colourVolumeSEIEnabled,false,"Control generation of mastering display colour volume SEI messages")
("SEIMasteringDisplayMaxLuminance",m_masteringDisplay.maxLuminance,10000u,"Specifies the mastering display maximum luminance value in units of 1/10000 candela per square metre (32-bit code value)")
("SEIMasteringDisplayMinLuminance",m_masteringDisplay.minLuminance,0u,"Specifies the mastering display minimum luminance value in units of 1/10000 candela per square metre (32-bit code value)")
("SEIMasteringDisplayPrimaries",cfg_DisplayPrimariesCode,cfg_DisplayPrimariesCode,"Mastering display primaries for all three colour planes in CIE xy coordinates in increments of 1/50000 (results in the ranges 0 to 50000 inclusive)")
("SEIMasteringDisplayWhitePoint",cfg_DisplayWhitePointCode,cfg_DisplayWhitePointCode,"Mastering display white point CIE xy coordinates in normalised increments of 1/50000 (e.g. 0.333 = 16667)")
xConfirmPara(m_lowerBitRateConstraintFlag==false&&m_intraConstraintFlag==false,"The lowerBitRateConstraint flag cannot be false when intraConstraintFlag is false");
xConfirmPara(m_alignCABACBeforeBypass&&m_profile!=Profile::HIGHTHROUGHPUTREXT,"AlignCABACBeforeBypass must not be enabled unless the high throughput profile is being used.");
xConfirmPara(!bValidProfile,"Invalid intra constraint flag, bit depth constraint flag and chroma format constraint flag combination for a RExt profile");
xConfirmPara((m_chromaFormatConstraint==CHROMA_420||m_chromaFormatConstraint==CHROMA_400)&&bUsingChromaQPTool,"CU Chroma QP adjustment cannot be used for 4:0:0 or 4:2:0 RExt profiles");
xConfirmPara(m_bitDepthConstraint!=16&&bUsingExtendedPrecision,"Extended precision can only be used in 16-bit RExt profiles");
xConfirmPara((m_internalBitDepth[channelType]>8),"Model is not configured to support high enough internal accuracies - enable RExt__HIGH_BIT_DEPTH_SUPPORT to use increased precision internal data types etc...");
xConfirmPara((m_internalBitDepth[channelType]>12),"Model is not configured to support high enough internal accuracies - enable RExt__HIGH_BIT_DEPTH_SUPPORT to use increased precision internal data types etc...");
}
}
#endif
xConfirmPara((m_MSBExtendedBitDepth[CHANNEL_TYPE_LUMA]<m_inputBitDepth[CHANNEL_TYPE_LUMA]),"MSB-extended bit depth for luma channel (--MSBExtendedBitDepth) must be greater than or equal to input bit depth for luma channel (--InputBitDepth)");
xConfirmPara((m_MSBExtendedBitDepth[CHANNEL_TYPE_CHROMA]<m_inputBitDepth[CHANNEL_TYPE_CHROMA]),"MSB-extended bit depth for chroma channel (--MSBExtendedBitDepthC) must be greater than or equal to input bit depth for chroma channel (--InputBitDepthC)");
xConfirmPara(m_saoOffsetBitShift[CHANNEL_TYPE_LUMA]>(m_internalBitDepth[CHANNEL_TYPE_LUMA]<10?0:(m_internalBitDepth[CHANNEL_TYPE_LUMA]-10)),"SaoLumaOffsetBitShift must be in the range of 0 to InternalBitDepth-10, inclusive");
xConfirmPara(m_saoOffsetBitShift[CHANNEL_TYPE_CHROMA]>(m_internalBitDepth[CHANNEL_TYPE_CHROMA]<10?0:(m_internalBitDepth[CHANNEL_TYPE_CHROMA]-10)),"SaoChromaOffsetBitShift must be in the range of 0 to InternalBitDepthC-10, inclusive");
xConfirmPara(m_chromaFormatIDC>=NUM_CHROMA_FORMAT,"ChromaFormatIDC must be either 400, 420, 422 or 444");
std::stringsTempIPCSC="InputColourSpaceConvert must be empty, "+getListOfColourSpaceConverts(true);
xConfirmPara(m_iQP<-6*(m_internalBitDepth[CHANNEL_TYPE_LUMA]-8)||m_iQP>51,"QP exceeds supported range (-QpBDOffsety to 51)");
xConfirmPara(m_loopFilterBetaOffsetDiv2<-6||m_loopFilterBetaOffsetDiv2>6,"Loop Filter Beta Offset div. 2 exceeds supported range (-6 to 6)");
xConfirmPara(m_loopFilterTcOffsetDiv2<-6||m_loopFilterTcOffsetDiv2>6,"Loop Filter Tc Offset div. 2 exceeds supported range (-6 to 6)");
xConfirmPara(m_iFastSearch<0||m_iFastSearch>2,"Fast Search Mode is not supported value (0:Full search 1:Diamond 2:PMVFAST)");
xConfirmPara(m_iSearchRange<0,"Search Range must be more than 0");
xConfirmPara(m_bipredSearchRange<0,"Search Range must be more than 0");
xConfirmPara(m_iMaxDeltaQP>7,"Absolute Delta QP exceeds supported range (0 to 7)");
xConfirmPara(m_iMaxCuDQPDepth>m_uiMaxCUDepth-1,"Absolute depth for a minimum CuDQP exceeds maximum coding unit depth");
xConfirmPara(m_cbQpOffset<-12,"Min. Chroma Cb QP Offset is -12");
xConfirmPara(m_cbQpOffset>12,"Max. Chroma Cb QP Offset is 12");
xConfirmPara(m_crQpOffset<-12,"Min. Chroma Cr QP Offset is -12");
xConfirmPara(m_crQpOffset>12,"Max. Chroma Cr QP Offset is 12");
xConfirmPara(m_iQPAdaptationRange<=0,"QP Adaptation Range must be more than 0");
if(m_iDecodingRefreshType==2)
{
xConfirmPara(m_iIntraPeriod>0&&m_iIntraPeriod<=m_iGOPSize,"Intra period must be larger than GOP size for periodic IDR pictures");
}
xConfirmPara((m_uiMaxCUWidth>>m_uiMaxCUDepth)<4,"Minimum partition width size should be larger than or equal to 8");
xConfirmPara((m_uiMaxCUHeight>>m_uiMaxCUDepth)<4,"Minimum partition height size should be larger than or equal to 8");
xConfirmPara(m_uiMaxCUWidth<16,"Maximum partition width size should be larger than or equal to 16");
xConfirmPara(m_uiMaxCUHeight<16,"Maximum partition height size should be larger than or equal to 16");
xConfirmPara((m_iSourceWidth%(m_uiMaxCUWidth>>(m_uiMaxCUDepth-1)))!=0,"Resulting coded frame width must be a multiple of the minimum CU size");
xConfirmPara((m_iSourceHeight%(m_uiMaxCUHeight>>(m_uiMaxCUDepth-1)))!=0,"Resulting coded frame height must be a multiple of the minimum CU size");
xConfirmPara(m_uiQuadtreeTULog2MinSize<2,"QuadtreeTULog2MinSize must be 2 or greater.");
xConfirmPara(m_uiQuadtreeTULog2MaxSize>5,"QuadtreeTULog2MaxSize must be 5 or smaller.");
xConfirmPara(m_uiQuadtreeTULog2MaxSize<m_uiQuadtreeTULog2MinSize,"QuadtreeTULog2MaxSize must be greater than or equal to m_uiQuadtreeTULog2MinSize.");
xConfirmPara((1<<m_uiQuadtreeTULog2MaxSize)>m_uiMaxCUWidth,"QuadtreeTULog2MaxSize must be log2(maxCUSize) or smaller.");
xConfirmPara((1<<m_uiQuadtreeTULog2MinSize)>=(m_uiMaxCUWidth>>(m_uiMaxCUDepth-1)),"QuadtreeTULog2MinSize must not be greater than or equal to minimum CU size");
xConfirmPara((1<<m_uiQuadtreeTULog2MinSize)>=(m_uiMaxCUHeight>>(m_uiMaxCUDepth-1)),"QuadtreeTULog2MinSize must not be greater than or equal to minimum CU size");
xConfirmPara(m_uiQuadtreeTUMaxDepthInter<1,"QuadtreeTUMaxDepthInter must be greater than or equal to 1");
xConfirmPara(m_uiMaxCUWidth<(1<<(m_uiQuadtreeTULog2MinSize+m_uiQuadtreeTUMaxDepthInter-1)),"QuadtreeTUMaxDepthInter must be less than or equal to the difference between log2(maxCUSize) and QuadtreeTULog2MinSize plus 1");
xConfirmPara(m_uiQuadtreeTUMaxDepthIntra<1,"QuadtreeTUMaxDepthIntra must be greater than or equal to 1");
xConfirmPara(m_uiMaxCUWidth<(1<<(m_uiQuadtreeTULog2MinSize+m_uiQuadtreeTUMaxDepthIntra-1)),"QuadtreeTUMaxDepthInter must be less than or equal to the difference between log2(maxCUSize) and QuadtreeTULog2MinSize plus 1");
xConfirmPara(m_maxNumMergeCand<1,"MaxNumMergeCand must be 1 or greater.");
xConfirmPara(m_maxNumMergeCand>5,"MaxNumMergeCand must be 5 or smaller.");
#if ADAPTIVE_QP_SELECTION
xConfirmPara(m_bUseAdaptQpSelect==true&&m_iQP<0,"AdaptiveQpSelection must be disabled when QP < 0.");
xConfirmPara(m_bUseAdaptQpSelect==true&&(m_cbQpOffset!=0||m_crQpOffset!=0),"AdaptiveQpSelection must be disabled when ChromaQpOffset is not equal to 0.");
xConfirmPara(((m_MSBExtendedBitDepth[channelType]>m_internalBitDepth[channelType])&&m_bPCMInputBitDepthFlag),"PCM bit depth cannot be greater than internal bit depth (PCMInputBitDepthFlag cannot be used when InputBitDepth or MSBExtendedBitDepth > InternalBitDepth)");
}
xConfirmPara(m_uiPCMLog2MinSize<3,"PCMLog2MinSize must be 3 or greater.");
xConfirmPara(m_uiPCMLog2MinSize>5,"PCMLog2MinSize must be 5 or smaller.");
xConfirmPara(m_pcmLog2MaxSize>5,"PCMLog2MaxSize must be 5 or smaller.");
xConfirmPara(m_pcmLog2MaxSize<m_uiPCMLog2MinSize,"PCMLog2MaxSize must be equal to or greater than m_uiPCMLog2MinSize.");
}
xConfirmPara(m_sliceMode<0||m_sliceMode>3,"SliceMode exceeds supported range (0 to 3)");
if(m_sliceMode!=0)
{
xConfirmPara(m_sliceArgument<1,"SliceArgument should be larger than or equal to 1");
}
xConfirmPara(m_sliceSegmentMode<0||m_sliceSegmentMode>3,"SliceSegmentMode exceeds supported range (0 to 3)");
if(m_sliceSegmentMode!=0)
{
xConfirmPara(m_sliceSegmentArgument<1,"SliceSegmentArgument should be larger than or equal to 1");
xConfirmPara(tileFlag&&m_iWaveFrontSynchro,"Tile and Wavefront can not be applied together, except in the High Throughput Intra 4:4:4 16 profile");
}
xConfirmPara(m_iSourceWidth%TComSPS::getWinUnitX(m_chromaFormatIDC)!=0,"Picture width must be an integer multiple of the specified chroma subsampling");
xConfirmPara(m_iSourceHeight%TComSPS::getWinUnitY(m_chromaFormatIDC)!=0,"Picture height must be an integer multiple of the specified chroma subsampling");
xConfirmPara(m_aiPad[0]%TComSPS::getWinUnitX(m_chromaFormatIDC)!=0,"Horizontal padding must be an integer multiple of the specified chroma subsampling");
xConfirmPara(m_aiPad[1]%TComSPS::getWinUnitY(m_chromaFormatIDC)!=0,"Vertical padding must be an integer multiple of the specified chroma subsampling");
xConfirmPara(m_confWinLeft%TComSPS::getWinUnitX(m_chromaFormatIDC)!=0,"Left conformance window offset must be an integer multiple of the specified chroma subsampling");
xConfirmPara(m_confWinRight%TComSPS::getWinUnitX(m_chromaFormatIDC)!=0,"Right conformance window offset must be an integer multiple of the specified chroma subsampling");
xConfirmPara(m_confWinTop%TComSPS::getWinUnitY(m_chromaFormatIDC)!=0,"Top conformance window offset must be an integer multiple of the specified chroma subsampling");
xConfirmPara(m_confWinBottom%TComSPS::getWinUnitY(m_chromaFormatIDC)!=0,"Bottom conformance window offset must be an integer multiple of the specified chroma subsampling");
xConfirmPara(m_defaultDisplayWindowFlag&&!m_vuiParametersPresentFlag,"VUI needs to be enabled for default display window");
if(m_defaultDisplayWindowFlag)
{
xConfirmPara(m_defDispWinLeftOffset%TComSPS::getWinUnitX(m_chromaFormatIDC)!=0,"Left default display window offset must be an integer multiple of the specified chroma subsampling");
xConfirmPara(m_defDispWinRightOffset%TComSPS::getWinUnitX(m_chromaFormatIDC)!=0,"Right default display window offset must be an integer multiple of the specified chroma subsampling");
xConfirmPara(m_defDispWinTopOffset%TComSPS::getWinUnitY(m_chromaFormatIDC)!=0,"Top default display window offset must be an integer multiple of the specified chroma subsampling");
xConfirmPara(m_defDispWinBottomOffset%TComSPS::getWinUnitY(m_chromaFormatIDC)!=0,"Bottom default display window offset must be an integer multiple of the specified chroma subsampling");
}
// max CU width and height should be power of 2
UIntui=m_uiMaxCUWidth;
while(ui)
{
ui>>=1;
if((ui&1)==1)
xConfirmPara(ui!=1,"Width should be 2^n");
}
ui=m_uiMaxCUHeight;
while(ui)
{
ui>>=1;
if((ui&1)==1)
xConfirmPara(ui!=1,"Height should be 2^n");
}
/* if this is an intra-only sequence, ie IntraPeriod=1, don't verify the GOP structure
xConfirmPara((m_GOPList[i].m_betaOffsetDiv2+m_loopFilterBetaOffsetDiv2)<-6||(m_GOPList[i].m_betaOffsetDiv2+m_loopFilterBetaOffsetDiv2)>6,"Loop Filter Beta Offset div. 2 for one of the GOP entries exceeds supported range (-6 to 6)");
xConfirmPara((m_GOPList[i].m_tcOffsetDiv2+m_loopFilterTcOffsetDiv2)<-6||(m_GOPList[i].m_tcOffsetDiv2+m_loopFilterTcOffsetDiv2)>6,"Loop Filter Tc Offset div. 2 for one of the GOP entries exceeds supported range (-6 to 6)");
}
}
m_extraRPSs=0;
//start looping through frames in coding order until we can verify that the GOP structure is correct.
xConfirmPara(m_iWaveFrontSynchro<0,"WaveFrontSynchro cannot be negative");
xConfirmPara(m_iWaveFrontSubstreams<=0,"WaveFrontSubstreams must be positive");
xConfirmPara(m_iWaveFrontSubstreams>1&&!m_iWaveFrontSynchro,"Must have WaveFrontSynchro > 0 in order to have WaveFrontSubstreams > 1");
xConfirmPara(m_decodedPictureHashSEIEnabled<0||m_decodedPictureHashSEIEnabled>3,"this hash type is not correct!\n");
if(m_toneMappingInfoSEIEnabled)
{
xConfirmPara(m_toneMapCodedDataBitDepth<8||m_toneMapCodedDataBitDepth>14,"SEIToneMapCodedDataBitDepth must be in rage 8 to 14");
xConfirmPara(m_toneMapTargetBitDepth<1||(m_toneMapTargetBitDepth>16&&m_toneMapTargetBitDepth<255),"SEIToneMapTargetBitDepth must be in rage 1 to 16 or equal to 255");
xConfirmPara(m_toneMapModelId<0||m_toneMapModelId>4,"SEIToneMapModelId must be in rage 0 to 4");
xConfirmPara(m_cameraIsoSpeedValue==0,"SEIToneMapCameraIsoSpeedValue shall not be equal to 0");
xConfirmPara(m_exposureIndexValue==0,"SEIToneMapExposureIndexValue shall not be equal to 0");
xConfirmPara(m_extendedRangeWhiteLevel<100,"SEIToneMapExtendedRangeWhiteLevel should be greater than or equal to 100");
xConfirmPara(m_nominalBlackLevelLumaCodeValue>=m_nominalWhiteLevelLumaCodeValue,"SEIToneMapNominalWhiteLevelLumaCodeValue shall be greater than SEIToneMapNominalBlackLevelLumaCodeValue");
xConfirmPara(m_extendedWhiteLevelLumaCodeValue<m_nominalWhiteLevelLumaCodeValue,"SEIToneMapExtendedWhiteLevelLumaCodeValue shall be greater than or equal to SEIToneMapNominalWhiteLevelLumaCodeValue");
}
if(m_kneeSEIEnabled&&!m_kneeSEICancelFlag)
{
xConfirmPara(m_kneeSEINumKneePointsMinus1<0||m_kneeSEINumKneePointsMinus1>998,"SEIKneeFunctionNumKneePointsMinus1 must be in the range of 0 to 998");
for(UInti=0;i<=m_kneeSEINumKneePointsMinus1;i++){
xConfirmPara(m_kneeSEIInputKneePoint[i]<1||m_kneeSEIInputKneePoint[i]>999,"SEIKneeFunctionInputKneePointValue must be in the range of 1 to 999");
xConfirmPara(m_kneeSEIOutputKneePoint[i]<0||m_kneeSEIOutputKneePoint[i]>1000,"SEIKneeFunctionInputKneePointValue must be in the range of 0 to 1000");
if(i>0)
{
xConfirmPara(m_kneeSEIInputKneePoint[i-1]>=m_kneeSEIInputKneePoint[i],"The i-th SEIKneeFunctionInputKneePointValue must be greater than the (i-1)-th value");
xConfirmPara(m_kneeSEIOutputKneePoint[i-1]>m_kneeSEIOutputKneePoint[i],"The i-th SEIKneeFunctionOutputKneePointValue must be greater than or equal to the (i-1)-th value");
}
}
}
if(m_RCEnableRateControl)
{
if(m_RCForceIntraQP)
{
if(m_RCInitialQP==0)
{
printf("\nInitial QP for rate control is not specified. Reset not to use force intra QP!");
m_RCForceIntraQP=false;
}
}
xConfirmPara(m_uiDeltaQpRD>0,"Rate control cannot be used together with slice level multiple-QP optimization!\n");
}
xConfirmPara(!m_TransquantBypassEnableFlag&&m_CUTransquantBypassFlagForce,"CUTransquantBypassFlagForce cannot be 1 when TransquantBypassEnableFlag is 0");
xConfirmPara(m_log2ParallelMergeLevel<2,"Log2ParallelMergeLevel should be larger than or equal to 2");
if(m_framePackingSEIEnabled)
{
xConfirmPara(m_framePackingSEIType<3||m_framePackingSEIType>5,"SEIFramePackingType must be in rage 3 to 5");
}
if(m_segmentedRectFramePackingSEIEnabled)
{
xConfirmPara(m_framePackingSEIEnabled>0,"SEISegmentedRectFramePacking must be 0 when SEIFramePacking is 1");
printf("SEITempMotionConstrainedTileSets is set to false to disable 'temporal_motion_constrained_tile_sets' SEI because there are no tiles enabled\n");
m_tmctsSEIEnabled=false;
}
if(m_timeCodeSEIEnabled)
{
xConfirmPara(m_timeCodeSEINumTs>MAX_TIMECODE_SEI_SETS,"Number of time sets cannot exceed 3");
}
#undef xConfirmPara
if(check_failed)
{
exit(EXIT_FAILURE);
}
}
/** \todo use of global variables should be removed later
*/
VoidTAppEncCfg::xSetGlobal()
{
// set max CU width & height
g_uiMaxCUWidth=m_uiMaxCUWidth;
g_uiMaxCUHeight=m_uiMaxCUHeight;
// compute actual CU depth with respect to config depth and max transform size
g_uiAddCUDepth+=getMaxCUDepthOffset(m_chromaFormatIDC,m_uiQuadtreeTULog2MinSize);// if minimum TU larger than 4x4, allow for additional part indices for 4:2:2 SubTUs.
caseCOST_LOSSLESS_CODING:printf("Cost function: : Lossless coding with fixed QP of %d\n",LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP);break;
caseCOST_MIXED_LOSSLESS_LOSSY_CODING:printf("Cost function: : Mixed_lossless_lossy coding with QP'=%d for lossless evaluation\n",LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP_PRIME);break;