summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxfengcarl <carl.zhang@intel.com>2017-09-07 23:51:07 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2017-11-21 23:27:31 -0800
commitc4218b5df975698e0e4dfda7b23928d95f9c5d0e (patch)
treecf159b459ce11ec5892a6109326dcfea3ca4fe62
parent759df800e6331671bf12ec473398cec7eb821da6 (diff)
downloadlibva-c4218b5df975698e0e4dfda7b23928d95f9c5d0e.tar.gz
add controls for encode quality
it include sub pel mode support, quality tuning, rounding inter... Signed-off-by: Carl.Zhang<carl.zhang@intel.com>
-rw-r--r--va/va.h125
-rw-r--r--va/va_enc_h264.h34
-rw-r--r--va/va_str.c1
3 files changed, 159 insertions, 1 deletions
diff --git a/va/va.h b/va/va.h
index 7f31742..666ad7f 100644
--- a/va/va.h
+++ b/va/va.h
@@ -686,6 +686,12 @@ typedef enum
* tiling structure, should be ignored. 0 - unsupported, 1 - supported.
*/
VAConfigAttribEncTileSupport = 35,
+ /**
+ * \brief whether accept rouding setting from application. Read-only.
+ * This attribute is for encode quality, if it is report,
+ * application can change the rounding setting by VAEncMiscParameterTypeCustomRoundingControl
+ */
+ VAConfigAttribCustomRoundingControl = 36,
/**@}*/
VAConfigAttribTypeMax
} VAConfigAttribType;
@@ -1581,7 +1587,7 @@ typedef struct _VAProcessingRateParameter {
* This function queries the processing rate based on parameters in
* \c proc_buf for the given \c config. Upon successful return, the processing
* rate value will be stored in \c processing_rate. Processing rate is
- * specified as the number of macroblocks per second.
+ * specified as the number of macroblocks/CTU per second.
*
* If NULL is passed to the \c proc_buf, the default processing rate for the
* given configuration will be returned.
@@ -1629,6 +1635,12 @@ typedef enum
VAEncMiscParameterTypeDirtyRect = 13,
/** \brief Buffer type used for parallel BRC parameters. */
VAEncMiscParameterTypeParallelBRC = 14,
+ /** \brief Set MB partion mode mask and Half-pel/Quant-pel motion search */
+ VAEncMiscParameterTypeSubMbPartPel = 15,
+ /** \brief set encode quality tuning */
+ VAEncMiscParameterTypeEncQuality = 16,
+ /** \brief Buffer type used for encoder rounding offset parameters. */
+ VAEncMiscParameterTypeCustomRoundingControl = 17,
/** \brief Buffer type used for FEI input frame level parameters */
VAEncMiscParameterTypeFEIFrameControl = 18,
} VAEncMiscParameterType;
@@ -2082,6 +2094,117 @@ typedef struct _VAEncMiscParameterParallelRateControl {
uint32_t *num_b_in_gop;
} VAEncMiscParameterParallelRateControl;
+/** per frame encoder quality controls, once set they will persist for all future frames
+ *till it is updated again. */
+typedef struct _VAEncMiscParameterEncQuality
+{
+ union
+ {
+ struct
+ {
+ /** Use raw frames for reference instead of reconstructed frames.
+ * it only impact motion estimation (ME) stage, and will not impact MC stage
+ * so the reconstruct picture will can match with decode side */
+ uint32_t useRawPicForRef : 1;
+ /** Disables skip check for ME stage, it will increase the bistream size
+ * but will improve the qulity */
+ uint32_t skipCheckDisable : 1;
+ /** Indicates app will override default driver FTQ settings using FTQEnable.
+ * FTQ is forward transform quantization */
+ uint32_t FTQOverride : 1;
+ /** Enables/disables FTQ. */
+ uint32_t FTQEnable : 1;
+ /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is
+ * enabled (FTQSkipThresholdLUT), else default driver thresholds will be used. */
+ uint32_t FTQSkipThresholdLUTInput : 1;
+ /** Indicates the app will provide the Skip Threshold LUT to use when FTQ is
+ * disabled (NonFTQSkipThresholdLUT), else default driver thresholds will be used. */
+ uint32_t NonFTQSkipThresholdLUTInput : 1;
+ uint32_t ReservedBit : 1;
+ /** Control to enable the ME mode decision algorithm to bias to fewer B Direct/Skip types.
+ * Applies only to B frames, all other frames will ignore this setting. */
+ uint32_t directBiasAdjustmentEnable : 1;
+ /** Enables global motion bias. global motion also is called HME (Heirarchical Motion Estimation )
+ * HME is used to handle large motions and avoiding local minima in the video encoding process
+ * down scaled the input and reference picture, then do ME. the result will be a predictor to next level HME or ME
+ * current interface divide the HME to 3 level. UltraHME , SuperHME, and HME, result of UltraHME will be input of SurperHME,
+ * result of superHME will be a input for HME. HME result will be input of ME. it is a switch for HMEMVCostScalingFactor
+ * can change the HME bias inside RDO stage*/
+ uint32_t globalMotionBiasAdjustmentEnable : 1;
+ /** MV cost scaling ratio for HME ( predictors. It is used when
+ * globalMotionBiasAdjustmentEnable == 1, else it is ignored. Values are:
+ * 0: set MV cost to be 0 for HME predictor.
+ * 1: scale MV cost to be 1/2 of the default value for HME predictor.
+ * 2: scale MV cost to be 1/4 of the default value for HME predictor.
+ * 3: scale MV cost to be 1/8 of the default value for HME predictor. */
+ uint32_t HMEMVCostScalingFactor : 2;
+ /**disable HME, if it is disabled. Super*ultraHME should also be disabled */
+ uint32_t HMEDisable : 1;
+ /**disable Super HME, if it is disabled, ultraHME should be disabled */
+ uint32_t SuperHMEDisable : 1;
+ /** disable Ultra HME */
+ uint32_t UltraHMEDisable : 1;
+ /** disable panic mode. Panic mode happened when there are extreme BRC (bit rate control) requirement
+ * frame size cant achieve the target of BRC. when Panic mode is triggered, Coefficients will
+ * be set to zero. disable panic mode will improve quality but will impact BRC */
+ uint32_t PanicModeDisable : 1;
+ /** Force RepartitionCheck
+ * 0: DEFAULT - follow driver default settings.
+ * 1: FORCE_ENABLE - enable this feature totally for all cases.
+ * 2: FORCE_DISABLE - disable this feature totally for all cases. */
+ uint32_t ForceRepartitionCheck : 2;
+
+ };
+ uint32_t encControls;
+ };
+
+ /** Maps QP to skip thresholds when FTQ is enabled. Valid range is 0-255. */
+ uint8_t FTQSkipThresholdLUT[52];
+ /** Maps QP to skip thresholds when FTQ is disabled. Valid range is 0-65535. */
+ uint16_t NonFTQSkipThresholdLUT[52];
+
+ uint32_t reserved[VA_PADDING_HIGH]; // Reserved for future use.
+
+} VAEncMiscParameterEncQuality;
+
+/**
+ * \brief Custom Encoder Rounding Offset Control.
+ * Application may use this structure to set customized rounding
+ * offset parameters for quantization.
+ * Valid when \c VAConfigAttribCustomRoundingControl equals 1.
+ */
+typedef struct _VAEncMiscParameterCustomRoundingControl
+{
+ union {
+ struct {
+ /** \brief Enable customized rounding offset for intra blocks.
+ * If 0, default value would be taken by driver for intra
+ * rounding offset.
+ */
+ uint32_t enable_custom_rouding_intra : 1 ;
+
+ /** \brief Intra rounding offset
+ * Ignored if \c enable_custom_rouding_intra equals 0.
+ */
+ uint32_t rounding_offset_intra : 7;
+
+ /** \brief Enable customized rounding offset for inter blocks.
+ * If 0, default value would be taken by driver for inter
+ * rounding offset.
+ */
+ uint32_t enable_custom_rounding_inter : 1 ;
+
+ /** \brief Inter rounding offset
+ * Ignored if \c enable_custom_rouding_inter equals 0.
+ */
+ uint32_t rounding_offset_inter : 7;
+
+ /* Reserved */
+ uint32_t reserved :16;
+ } bits;
+ uint32_t value;
+ } rounding_offset_setting;
+} VAEncMiscParameterCustomRoundingControl;
/**
* There will be cases where the bitstream buffer will not have enough room to hold
* the data for the entire slice, and the following flags will be used in the slice
diff --git a/va/va_enc_h264.h b/va/va_enc_h264.h
index 7328b7b..656fd8b 100644
--- a/va/va_enc_h264.h
+++ b/va/va_enc_h264.h
@@ -617,6 +617,40 @@ typedef struct _VAEncMacroblockParameterBufferH264 {
uint32_t va_reserved[VA_PADDING_LOW];
} VAEncMacroblockParameterBufferH264;
+/**
+ * \brief MB partition modes and 1/2 1/4 motion search configuration
+ *
+ * Specifies MB partition modes that are disabled. Specifies Half-pel
+ * mode and Quarter-pel mode searching
+ */
+typedef struct _VAEncMiscParameterSubMbPartPelH264
+{
+ uint32_t disable_inter_sub_mb_partition;
+ union {
+ struct {
+ uint32_t disable_16x16_inter_mb_partition : 1;
+ uint32_t disable_16x8_inter_mb_partition : 1;
+ uint32_t disable_8x16_inter_mb_partition : 1;
+ uint32_t disable_8x8_inter_mb_partition : 1;
+ uint32_t disable_8x4_inter_mb_partition : 1;
+ uint32_t disable_4x8_inter_mb_partition : 1;
+ uint32_t disable_4x4_inter_mb_partition : 1;
+ uint32_t reserved : 1;
+ } bits;
+ uint8_t value;
+ } inter_sub_mb_partition_mask;
+
+ /**
+ * \brief Precison of motion search
+ * 0:Integer mode searching
+ * 1:Half-pel mode searching
+ * 2:Reserved
+ * 3:Quarter-pel mode searching
+ */
+ uint32_t enable_sub_pel_mode;
+ uint8_t sub_pel_mode;
+ uint8_t reserved[3];
+} VAEncMiscParameterSubMbPartPelH264;
/**@}*/
#ifdef __cplusplus
diff --git a/va/va_str.c b/va/va_str.c
index 17463be..3c85455 100644
--- a/va/va_str.c
+++ b/va/va_str.c
@@ -110,6 +110,7 @@ const char *vaConfigAttribTypeStr(VAConfigAttribType configAttribType)
TOSTR(VAConfigAttribDecProcessing);
TOSTR(VAConfigAttribFrameSizeToleranceSupport);
TOSTR(VAConfigAttribEncTileSupport);
+ TOSTR(VAConfigAttribCustomRoundingControl);
case VAConfigAttribTypeMax: break;
}
return "<unknown config attribute type>";