Template
454 lines
19 KiB
C
454 lines
19 KiB
C
/*!
|
|
************************************************************************
|
|
* \file params.h
|
|
*
|
|
* \brief
|
|
* Input parameters related definitions
|
|
*
|
|
* \author
|
|
*
|
|
************************************************************************
|
|
*/
|
|
|
|
#ifndef _PARAMS_H_
|
|
#define _PARAMS_H_
|
|
|
|
#include "defines.h"
|
|
#include "types.h"
|
|
#include "vui_params.h"
|
|
#include "frame.h"
|
|
#include "io_video.h"
|
|
|
|
//! all input parameters
|
|
struct inp_par_enc
|
|
{
|
|
int ProfileIDC; //!< value of syntax element profile_idc
|
|
int LevelIDC; //!< value of syntax element level_idc
|
|
int IntraProfile; //!< Enable Intra profiles
|
|
|
|
int no_frames; //!< number of frames to be encoded
|
|
int qp[NUM_SLICE_TYPES]; //!< QP values for all slice types
|
|
int qp2frame; //!< frame in display order from which to apply the Change QP offsets
|
|
int qp2off[NUM_SLICE_TYPES]; //!< Change QP offset values for all slice types
|
|
int qpsp; //!< QPSP quantization value
|
|
int frame_skip; //!< number of frames to skip in input sequence (e.g 2 takes frame 0,3,6,9...)
|
|
int jumpd; /*!< number of frames to skip in input sequence including intermediate pictures
|
|
(e.g 2 takes frame 0,3,6,9...) */
|
|
int DisableSubpelME[2]; //!< Disable sub-pixel motion estimation
|
|
int search_range[2]; /*!< search range - integer pel search and 16x16 blocks. The search window is
|
|
generally around the predicted vector. Max vector is 2xmcrange. */
|
|
int num_ref_frames; //!< number of reference frames to be used
|
|
int P_List0_refs[2]; //!< number of reference picture in list 0 in P pictures
|
|
int B_List0_refs[2]; //!< number of reference picture in list 0 in B pictures
|
|
int B_List1_refs[2]; //!< number of reference picture in list 1 in B pictures
|
|
int num_ref_frames_org;
|
|
int P_List0_refs_org[2]; //!< number of reference picture in list 0 in P pictures
|
|
int B_List0_refs_org[2]; //!< number of reference picture in list 0 in B pictures
|
|
int B_List1_refs_org[2]; //!< number of reference picture in list 1 in B pictures
|
|
int Log2MaxFNumMinus4; //!< value of syntax element log2_max_frame_num
|
|
int Log2MaxPOCLsbMinus4; //!< value of syntax element log2_max_pic_order_cnt_lsb_minus4
|
|
|
|
// Input/output sequence format related variables
|
|
FrameFormat source; //!< source related information
|
|
FrameFormat output; //!< output related information
|
|
int is_interleaved;
|
|
int src_resize; //!< Control if input sequence will be resized (currently only cropping is supported)
|
|
int src_BitDepthRescale; //!< Control if input sequence bitdepth should be adjusted
|
|
int yuv_format; //!< YUV format (0=4:0:0, 1=4:2:0, 2=4:2:2, 3=4:4:4)
|
|
int intra_upd; /*!< For error robustness. 0: no special action. 1: One GOB/frame is intra coded
|
|
as regular 'update'. 2: One GOB every 2 frames is intra coded etc.
|
|
In connection with this intra update, restrictions is put on motion vectors
|
|
to prevent errors to propagate from the past */
|
|
|
|
int slice_mode; //!< Indicate what algorithm to use for setting slices
|
|
int slice_argument; //!< Argument to the specified slice algorithm
|
|
int UseConstrainedIntraPred; //!< 0: Inter MB pixels are allowed for intra prediction 1: Not allowed
|
|
int SetFirstAsLongTerm; //!< Support for temporal considerations for CB plus encoding
|
|
int infile_header; //!< If input file has a header set this to the length of the header
|
|
int MultiSourceData;
|
|
VideoDataFile input_file2; //!< Input video file2
|
|
VideoDataFile input_file3; //!< Input video file3
|
|
int num_of_views; //!< number of views to encode (1=1view, 2=2views)
|
|
#if (MVC_EXTENSION_ENABLE)
|
|
char View1ConfigName[FILE_NAME_SIZE]; //!<Filename for View1 configuration
|
|
int EnhLayerDFDisableIdc[2][NUM_SLICE_TYPES];
|
|
int EnhLayerDFAlpha [2][NUM_SLICE_TYPES];
|
|
int EnhLayerDFBeta [2][NUM_SLICE_TYPES];
|
|
int MVCInterViewReorder; //!< Reorder References according to interview pictures
|
|
int MVCFlipViews; //!< Reverse the order of the views in the bitstream (view 1 has VOIdx 0 and view 1 has VOIdx 0)
|
|
int MVCInterViewForceB; //!< Force B slices for enhancement layer
|
|
int View1QPOffset; //!< QP offset during rate control for View 1
|
|
int enable_inter_view_flag; //!< Enables inter_view_flag (allows pictures that are to be used for inter-view only prediction)
|
|
double enh_layer_lambda_multiplier; //!< Weight lambda for enhancement layer
|
|
double enh_layer_me_lambda_multiplier;//!< Weight ME lambda for enhancement layer
|
|
|
|
//!Edited by Joao Carreira
|
|
char outfile_base [FILE_NAME_SIZE]; //!< Base view filename
|
|
char outfile_aux [FILE_NAME_SIZE]; //!< Aux view filename
|
|
|
|
#endif
|
|
VideoDataFile input_file1; //!< Input video file1
|
|
char outfile [FILE_NAME_SIZE]; //!< H.264 compressed output bitstream
|
|
char ReconFile [FILE_NAME_SIZE]; //!< Reconstructed Pictures (view 0 for MVC profile)
|
|
char ReconFile2 [FILE_NAME_SIZE]; //!< Reconstructed Pictures (view 1)
|
|
char TraceFile [FILE_NAME_SIZE]; //!< Trace Outputs
|
|
char StatsFile [FILE_NAME_SIZE]; //!< Stats File
|
|
char QmatrixFile [FILE_NAME_SIZE]; //!< Q matrix cfg file
|
|
int ProcessInput; //!< Filter Input Sequence
|
|
int EnableOpenGOP; //!< support for open gops.
|
|
int EnableIDRGOP; //!< support for IDR closed gops with no shared B coded pictures.
|
|
int grayscale; //!< encode in grayscale (Currently only works for 8 bit, YUV 420)
|
|
|
|
int idr_period; //!< IDR picture period
|
|
int intra_period; //!< intra picture period
|
|
int intra_delay; //!< IDR picture delay
|
|
int adaptive_idr_period;
|
|
int adaptive_intra_period; //!< reinitialize start of intra period
|
|
|
|
int start_frame; //!< Encode sequence starting from Frame start_frame
|
|
|
|
int enable_32_pulldown;
|
|
|
|
int GenerateMultiplePPS;
|
|
int GenerateSEIMessage;
|
|
char SEIMessageText[INPUT_TEXT_SIZE];
|
|
|
|
int ResendSPS;
|
|
int ResendPPS;
|
|
|
|
int SendAUD; //!< send Access Unit Delimiter NALU
|
|
int skip_gl_stats;
|
|
|
|
// B pictures
|
|
int NumberBFrames; //!< number of B frames that will be used
|
|
int PReplaceBSlice;
|
|
int qpBRSOffset; //!< QP for reference B slice coded pictures
|
|
int direct_spatial_mv_pred_flag; //!< Direct Mode type to be used (0: Temporal, 1: Spatial)
|
|
int directInferenceFlag; //!< Direct Mode Inference Flag
|
|
|
|
int BiPredMotionEstimation; //!< Use of Bipredictive motion estimation
|
|
int BiPredSearch[4]; //!< Bipredictive motion estimation for modes 16x16, 16x8, 8x16, and 8x8
|
|
int BiPredMERefinements; //!< Max number of Iterations for Bi-predictive motion estimation
|
|
int BiPredMESearchRange[2]; //!< Search range of Bi-predictive motion estimation
|
|
int BiPredMESubPel; //!< Use of subpixel refinement for Bi-predictive motion estimation
|
|
|
|
// SP/SI Pictures
|
|
int sp_periodicity; //!< The periodicity of SP-pictures
|
|
int sp_switch_period; //!< Switch period (in terms of switching SP/SI frames) between bitstream 1 and bitstream 2
|
|
int si_frame_indicator; //!< Flag indicating whether SI frames should be encoded rather than SP frames (0: not used, 1: used)
|
|
int sp2_frame_indicator; //!< Flag indicating whether switching SP frames should be encoded rather than SP frames (0: not used, 1: used)
|
|
int sp_output_indicator; //!< Flag indicating whether coefficients are output to allow future encoding of switchin SP frames (0: not used, 1: used)
|
|
char sp_output_filename[FILE_NAME_SIZE]; //!<Filename where SP coefficients are output
|
|
char sp2_input_filename1[FILE_NAME_SIZE]; //!<Filename of coefficients of the first bitstream when encoding SP frames to switch bitstreams
|
|
char sp2_input_filename2[FILE_NAME_SIZE]; //!<Filenames of coefficients of the second bitstream when encoding SP frames to switch bitstreams
|
|
|
|
// Weighted Prediction
|
|
int WeightedPrediction; //!< Weighted prediction for P frames (0: not used, 1: explicit)
|
|
int WeightedBiprediction; //!< Weighted prediction for B frames (0: not used, 1: explicit, 2: implicit)
|
|
int WPMethod; //!< WP method (0: DC, 1: LMS)
|
|
int WPIterMC; //!< Iterative WP method
|
|
int WPMCPrecision;
|
|
int WPMCPrecFullRef;
|
|
int WPMCPrecBSlice;
|
|
int EnhancedBWeightSupport;
|
|
int ChromaWeightSupport; //!< Weighted prediction support for chroma (0: disabled, 1: enabled)
|
|
int UseWeightedReferenceME; //!< Use Weighted Reference for ME.
|
|
int RDPictureDecision; //!< Perform RD optimal decision between various coded versions of same picture
|
|
int RDPSliceBTest; //!< Tests B slice replacement for P.
|
|
int RDPSliceITest; //!< Tests I slice replacement for P.
|
|
int RDPictureMaxPassISlice; //!< Max # of coding passes for I-slice
|
|
int RDPictureMaxPassPSlice; //!< Max # of coding passes for P-slice
|
|
int RDPictureMaxPassBSlice; //!< Max # of coding passes for B-slice
|
|
int RDPictureDeblocking; //!< Whether to choose between deblocked and non-deblocked picture
|
|
int RDPictureDirectMode; //!< Whether to check the other direct mode for B slices
|
|
int RDPictureFrameQPPSlice; //!< Whether to check additional frame level QP values for P slices
|
|
int RDPictureFrameQPBSlice; //!< Whether to check additional frame level QP values for B slices
|
|
|
|
int SkipIntraInInterSlices; //!< Skip intra type checking in inter slices if best_mode is skip/direct
|
|
int BRefPictures; //!< B coded reference pictures replace P pictures (0: not used, 1: used)
|
|
int HierarchicalCoding;
|
|
int HierarchyLevelQPEnable;
|
|
char ExplicitHierarchyFormat[INPUT_TEXT_SIZE]; //!< Explicit GOP format (HierarchicalCoding==3).
|
|
// explicit sequence information parameters
|
|
int ExplicitSeqCoding;
|
|
char ExplicitSeqFile[FILE_NAME_SIZE];
|
|
int LowDelay; //!< Apply HierarchicalCoding without delay (i.e., encode in the captured/display order)
|
|
|
|
int ReferenceReorder; //!< Reordering based on Poc distances
|
|
int PocMemoryManagement; //!< Memory management based on Poc distances for hierarchical coding
|
|
|
|
int symbol_mode; //!< Specifies the mode the symbols are mapped on bits
|
|
int of_mode; //!< Specifies the mode of the output file
|
|
int partition_mode; //!< Specifies the mode of data partitioning
|
|
|
|
// #if (MVC_EXTENSION_ENABLE)
|
|
int SepViewInterSearch;
|
|
int View1NoResidueRDO;
|
|
// #endif
|
|
int InterSearch[2][2][8];
|
|
|
|
/************************
|
|
*Edited by Joao Carreira
|
|
*/
|
|
char TranscodeFile[2][FILE_NAME_SIZE];
|
|
int PFramesOnlyView1; //!< Flag to use only interview prediction for second view
|
|
int Force_InterView; //!< Flag to use only interview prediction for second view
|
|
int Force_BiPredMultiview; //!< Flag to force bi prediction of view1 blocks
|
|
int List1NotUsed; //!< Flag to disable List 1 prediction
|
|
//************************
|
|
|
|
int DisableIntra4x4;
|
|
int DisableIntra16x16;
|
|
int FastMDEnable;
|
|
int FastIntraMD;
|
|
int FastIntra4x4;
|
|
int FastIntra16x16;
|
|
int FastIntra8x8;
|
|
int FastIntraChroma;
|
|
|
|
int DisableIntraInInter[2];
|
|
int IntraDisableInterOnly;
|
|
int Intra4x4ParDisable;
|
|
int Intra4x4DiagDisable;
|
|
int Intra4x4DirDisable;
|
|
int Intra16x16ParDisable;
|
|
int Intra16x16PlaneDisable;
|
|
int ChromaIntraDisable;
|
|
|
|
int EnableIPCM;
|
|
|
|
double FrameRate;
|
|
|
|
int chroma_qp_index_offset;
|
|
int full_search;
|
|
|
|
int rdopt;
|
|
int de; //!< the algorithm to estimate the distortion in the decoder
|
|
int I16rdo;
|
|
int MDReference[2];
|
|
int subMBCodingState;
|
|
int Distortion[TOTAL_DIST_TYPES];
|
|
double VisualResWavPSNR;
|
|
int SSIMOverlapSize;
|
|
int DistortionYUVtoRGB;
|
|
int CtxAdptLagrangeMult; //!< context adaptive lagrangian multiplier
|
|
int FastCrIntraDecision;
|
|
int disthres;
|
|
int nobskip;
|
|
int BiasSkipRDO;
|
|
int ForceTrueRateRDO;
|
|
|
|
#ifdef _LEAKYBUCKET_
|
|
int NumberLeakyBuckets;
|
|
char LeakyBucketRateFile[FILE_NAME_SIZE];
|
|
char LeakyBucketParamFile[FILE_NAME_SIZE];
|
|
#endif
|
|
|
|
int PicInterlace; //!< picture adaptive frame/field
|
|
int MbInterlace; //!< macroblock adaptive frame/field
|
|
int IntraBottom; //!< Force Intra Bottom at GOP periods.
|
|
|
|
// Error resilient RDO parameters
|
|
double LossRateA; //!< assumed loss probablility of partition A (or full slice), in per cent, used for loss-aware R/D optimization
|
|
double LossRateB; //!< assumed loss probablility of partition B, in per cent, used for loss-aware R/D
|
|
double LossRateC; //!< assumed loss probablility of partition C, in per cent, used for loss-aware R/D
|
|
int FirstFrameCorrect; //!< the first frame is encoded under the assumption that it is always correctly received.
|
|
int NoOfDecoders;
|
|
int ErrorConcealment; //!< Error concealment method used for loss-aware RDO (0: Copy Concealment)
|
|
int RestrictRef;
|
|
int NumFramesInELSubSeq;
|
|
|
|
int RandomIntraMBRefresh; //!< Number of pseudo-random intra-MBs per picture
|
|
|
|
int OnTheFlyFractMCP; //!< On the fly interpolation mode
|
|
|
|
// Chroma interpolation and buffering
|
|
int ChromaMCBuffer;
|
|
int ChromaMEEnable;
|
|
int ChromaMEWeight;
|
|
int MESoftenSSEMetric;
|
|
int MEErrorMetric[3];
|
|
int ModeDecisionMetric;
|
|
int SkipDeBlockNonRef;
|
|
|
|
// Deblocking Filter parameters
|
|
int DFSendParameters;
|
|
int DFDisableIdc[2][NUM_SLICE_TYPES];
|
|
int DFAlpha [2][NUM_SLICE_TYPES];
|
|
int DFBeta [2][NUM_SLICE_TYPES];
|
|
|
|
int SparePictureOption;
|
|
int SPDetectionThreshold;
|
|
int SPPercentageThreshold;
|
|
|
|
// FMO
|
|
char SliceGroupConfigFileName[FILE_NAME_SIZE]; //!< Filename for config info fot type 0, 2, 6
|
|
int num_slice_groups_minus1; //!< "FmoNumSliceGroups" in encoder.cfg, same as FmoNumSliceGroups, which should be erased later
|
|
int slice_group_map_type;
|
|
|
|
unsigned int *top_left; //!< top_left and bottom_right store values indicating foregrounds
|
|
unsigned int *bottom_right;
|
|
byte *slice_group_id; //!< slice_group_id is for slice group type being 6
|
|
int *run_length_minus1; //!< run_length_minus1 is for slice group type being 0
|
|
|
|
int slice_group_change_direction_flag;
|
|
int slice_group_change_rate_minus1;
|
|
int slice_group_change_cycle;
|
|
|
|
int redundant_pic_flag; //! encoding of redundant pictures
|
|
int pic_order_cnt_type; //! POC type
|
|
|
|
int context_init_method;
|
|
int model_number;
|
|
int Transform8x8Mode;
|
|
int ReportFrameStats;
|
|
int DisplayEncParams;
|
|
int Verbose;
|
|
|
|
//! Rate Control parameters
|
|
int RCEnable;
|
|
int bit_rate;
|
|
int SeinitialQP;
|
|
unsigned int basicunit;
|
|
int channel_type;
|
|
int RCUpdateMode;
|
|
double RCIoverPRatio;
|
|
double RCBoverPRatio;
|
|
double RCISliceBitRatio;
|
|
double RCBSliceBitRatio[RC_MAX_TEMPORAL_LEVELS];
|
|
int RCMinQP[NUM_SLICE_TYPES];
|
|
int RCMaxQP[NUM_SLICE_TYPES];
|
|
int RCMaxQPChange;
|
|
|
|
// Motion Estimation related parameters
|
|
int UseMVLimits;
|
|
int SetMVXLimit;
|
|
int SetMVYLimit;
|
|
|
|
// Search Algorithm
|
|
SearchType SearchMode[2];
|
|
|
|
// UMHEX related parameters
|
|
int UMHexDSR;
|
|
int UMHexScale;
|
|
|
|
// EPZS related parameters
|
|
int EPZSPattern;
|
|
int EPZSDual;
|
|
int EPZSFixed;
|
|
#if (MVC_EXTENSION_ENABLE)
|
|
int EPZSTemporal[2];
|
|
#else
|
|
int EPZSTemporal;
|
|
#endif
|
|
int EPZSSpatialMem;
|
|
int EPZSBlockType;
|
|
#if (MVC_EXTENSION_ENABLE)
|
|
int EnableEnhLayerEPZSScalers;
|
|
int EPZSMinThresScale[2];
|
|
int EPZSMaxThresScale[2];
|
|
int EPZSMedThresScale[2];
|
|
int EPZSSubPelThresScale[2];
|
|
#else
|
|
int EPZSMinThresScale;
|
|
int EPZSMaxThresScale;
|
|
int EPZSMedThresScale;
|
|
int EPZSSubPelThresScale;
|
|
#endif
|
|
int DisableMEPrediction;
|
|
int EPZSSubPelGrid;
|
|
int EPZSSubPelME;
|
|
int EPZSSubPelMEBiPred;
|
|
|
|
int MinIDRDistance;
|
|
// Lambda Params
|
|
int UseExplicitLambdaParams;
|
|
int UpdateLambdaChromaME;
|
|
double LambdaWeight[6];
|
|
double FixedLambda[6];
|
|
|
|
char QOffsetMatrixFile[FILE_NAME_SIZE]; //!< Quantization Offset matrix cfg file
|
|
int OffsetMatrixPresentFlag; //!< Enable Explicit Quantization Offset Matrices
|
|
|
|
int AdaptiveRounding; //!< Adaptive Rounding parameter based on JVT-N011
|
|
int AdaptRoundingFixed; //!< Global rounding for all qps
|
|
int AdaptRndPeriod; //!< Set period for adaptive rounding of JVT-N011 in MBs
|
|
int AdaptRndChroma;
|
|
int AdaptRndWFactor [2][NUM_SLICE_TYPES]; //!< Weighting factors for luma component based on reference indicator and slice type
|
|
int AdaptRndCrWFactor[2][NUM_SLICE_TYPES]; //!< Weighting factors for chroma components based on reference indicator and slice type
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// Fidelity Range Extensions
|
|
int ScalingMatrixPresentFlag;
|
|
int ScalingListPresentFlag[12];
|
|
|
|
int cb_qp_index_offset;
|
|
int cr_qp_index_offset;
|
|
// Lossless Coding
|
|
int LosslessCoding;
|
|
|
|
// Fast Mode Decision
|
|
int EarlySkipEnable;
|
|
int SelectiveIntraEnable;
|
|
int DisposableP;
|
|
int DispPQPOffset;
|
|
|
|
//Redundant picture
|
|
int NumRedundantHierarchy; //!< number of entries to allocate redundant pictures in a GOP
|
|
int PrimaryGOPLength; //!< GOP length of primary pictures
|
|
int NumRefPrimary; //!< number of reference frames for primary picture
|
|
|
|
// tone mapping SEI message
|
|
int ToneMappingSEIPresentFlag;
|
|
char ToneMappingFile[FILE_NAME_SIZE]; //!< ToneMapping SEI message cfg file
|
|
|
|
// prediction structure
|
|
int PreferDispOrder; //!< Prefer display order when building the prediction structure as opposed to coding order
|
|
int PreferPowerOfTwo; //!< Prefer prediction structures that have lengths expressed as powers of two
|
|
int FrmStructBufferLength; //!< Number of frames that is populated every time populate_frm_struct is called
|
|
// support for "soft" 3:2 pulldown
|
|
int rc_cpb_size;
|
|
int SEIVUI32Pulldown; //!< Enable 3:2 pulldown through VUI and SEI metadata signalling. Three methods are supported.
|
|
|
|
int separate_colour_plane_flag;
|
|
double WeightY;
|
|
double WeightCb;
|
|
double WeightCr;
|
|
int UseRDOQuant;
|
|
int RDOQ_DC;
|
|
int RDOQ_CR;
|
|
int RDOQ_DC_CR;
|
|
int RDOQ_QP_Num;
|
|
int RDOQ_CP_Mode;
|
|
int RDOQ_CP_MV;
|
|
int RDOQ_Fast;
|
|
|
|
int EnableVUISupport;
|
|
// VUI parameters
|
|
VUIParameters VUI;
|
|
// end of VUI parameters
|
|
|
|
// LZL additions
|
|
int stdRange; //!< 1 - standard range, 0 - full range
|
|
int videoCode; //!< 1 - 709, 3 - 601: See VideoCode in io_tiff.
|
|
|
|
#if B0_MORE_REF
|
|
int BLevel0MoreRef;
|
|
#endif
|
|
#if KEEP_B_SAME_LIST
|
|
int BIdenticalList;
|
|
#endif
|
|
#if CRA
|
|
int useCRA;
|
|
#endif
|
|
#if HM50_LIKE_MMCO
|
|
int HM50LikeMMCO;
|
|
#endif
|
|
#if LD_REF_SETTING
|
|
int useF701RefForLD;
|
|
#endif
|
|
};
|
|
|
|
#endif
|
|
|