[Libva] [PATCH Intel-FEI 1/2] Add left buffers type and some parameters for FEI case

Xiang, Haihao haihao.xiang at intel.com
Tue May 20 19:10:26 PDT 2014


Pushed,

Thanks
Haihao

> From e69c8bca40de5ec22733fe8074967415a4c41799 Mon Sep 17 00:00:00 2001
> From: Kelvin Hu <kelvin.hu at intel.com>
> Date: Mon, 5 May 2014 22:18:20 +0800
> Subject: [PATCH 1/2] Add left buffers type and some parameters for FEI case
> 
> Add three new optional FEI buffers and MV layout VAMotionVectorIntel,
> and updated FEI/statistics frame level control parameters.
> ---
>  va/Makefile.am                        |    2 ++
>  va/va.h                               |   34 ++++++++++++++++++++++++
>  va/vendor/intel/va_intel_fei.h        |   47 +++++++++++++++++++++++++--------
>  va/vendor/intel/va_intel_statistics.h |   42 ++++++++++-------------------
>  4 files changed, 86 insertions(+), 39 deletions(-)
> 
> diff --git a/va/Makefile.am b/va/Makefile.am
> index 13ea35a..09225ea 100644
> --- a/va/Makefile.am
> +++ b/va/Makefile.am
> @@ -58,6 +58,8 @@ libva_source_h = \
>         va_tpi.h                \
>         va_version.h            \
>         va_vpp.h                \
> +       vendor/intel/va_intel_fei.h  \
> +       vendor/intel/va_intel_statistics.h \
>         $(NULL)
>  
>  libva_source_h_priv = \
> diff --git a/va/va.h b/va/va.h
> index 794ffb5..1c2eade 100644
> --- a/va/va.h
> +++ b/va/va.h
> @@ -1316,9 +1316,12 @@ typedef enum
>      VAEncFEIMVBufferTypeIntel                 = 1001,
>      VAEncFEIModeBufferTypeIntel,
>      VAEncFEIDistortionBufferTypeIntel,
> +    VAEncFEIMBControlBufferTypeIntel,
> +    VAEncFEIMVPredictorBufferTypeIntel,
>      VAStatsStatisticsParameterBufferTypeIntel,
>      VAStatsStatisticsBufferTypeIntel,
>      VAStatsMotionVectorBufferTypeIntel,
> +    VAStatsMVPredictorBufferTypeIntel,
>  
>      VABufferTypeMax
>  } VABufferType;
> @@ -1760,6 +1763,37 @@ typedef struct _VASliceParameterBufferBase
>      unsigned int slice_data_flag;      /* see VA_SLICE_DATA_FLAG_XXX definitions */
>  } VASliceParameterBufferBase;
>  
> +/** \brief VAEncFEIMVBufferTypeIntel and VAStatsMotionVectorBufferTypeIntel. Motion vector buffer layout.
> + * Motion vector output is per 4x4 block. For each 4x4 block there is a pair of past and future 
> + * reference MVs as defined in VAMotionVectorIntel. Depending on Subblock partition, 
> + * for the shape that is not 4x4, the MV is replicated so each 4x4 block has a pair of MVs. 
> + * If only past reference is used, future MV should be ignored, and vice versa. 
> + * The 16x16 block is in raster scan order, within the 16x16 block, each 4x4 block MV is ordered as below in memory. 
> + * The buffer size shall be greater than or equal to the number of 16x16 blocks multiplied by (sizeof(VAMotionVector) * 16).
> + *
> + *                      16x16 Block        
> + *        -----------------------------------------
> + *        |    1    |    2    |    5    |    6    |
> + *        -----------------------------------------
> + *        |    3    |    4    |    7    |    8    |
> + *        -----------------------------------------
> + *        |    9    |    10   |    13   |    14   |
> + *        -----------------------------------------
> + *        |    11   |    12   |    15   |    16   |
> + *        -----------------------------------------
> + *
> + **/
> +
> +/** \brief Motion vector data structure. */
> +typedef struct _VAMotionVectorIntel {
> +    /** \mv0[0]: horizontal motion vector for past reference */
> +    /** \mv0[1]: vertical motion vector for past reference */
> +    /** \mv1[0]: horizontal motion vector for future reference */
> +    /** \mv1[1]: vertical motion vector for future reference */
> +    short  mv0[2];  /* past reference */
> +    short  mv1[2];  /* future reference */
> +} VAMotionVectorIntel;
> +
>  #include <va/va_dec_jpeg.h>
>  
>  /****************************
> diff --git a/va/vendor/intel/va_intel_fei.h b/va/vendor/intel/va_intel_fei.h
> index a036bea..48e4811 100644
> --- a/va/vendor/intel/va_intel_fei.h
> +++ b/va/vendor/intel/va_intel_fei.h
> @@ -46,21 +46,44 @@ extern "C" {
>  
>  /** \brief FEI frame level control buffer for H.264 */
>  typedef struct _VAEncMiscParameterFEIFrameControlH264Intel {
> -    unsigned int function; /* one of the VAConfigAttribEncFunctionType values */   
> -    /** \brief MB (16x16) control input surface. It is valid only when (mb_input | mb_size_ctrl) 
> +    unsigned int      function; /* one of the VAConfigAttribEncFunctionType values */   
> +    /** \brief MB (16x16) control input buffer. It is valid only when (mb_input | mb_size_ctrl) 
>       * is set to 1. The data in this buffer correspond to the input source. 16x16 MB is in raster scan order, 
>       * each MB control data structure is defined by VAEncFEIMBControlBufferH264. 
>       * Buffer size shall not be less than the number of 16x16 blocks multiplied by 
>       * sizeof(VAEncFEIMBControlBufferH264Intel). 
>       * Note: if mb_qp is set, VAEncQpBufferH264 is expected.
>       */
> -    VASurfaceID       mb_ctrl;
> +    VABufferID        mb_ctrl;
> +    /** \brief distortion output of MB ENC or ENC_PAK.
> +     * Each 16x16 block has one distortion data with VAEncFEIDistortionBufferH264Intel layout
> +     * Buffer size shall not be less than the number of 16x16 blocks multiplied by 
> +     * sizeof(VAEncFEIDistortionBufferH264Intel). 
> +     */
> +    VABufferID        distortion;
> +    /** \brief MVs data output of MB ENC.
> +     * Each 16x16 block has one MVs data with layout VAMotionVectorIntel 
> +     * Buffer size shall not be less than the number of 16x16 blocks multiplied by 
> +     * sizeof(VAMotionVectorIntel). 
> +     */
> +    VABufferID        mv_data;
> +    /** \brief MBCode data output of MB ENC.
> +     * Each 16x16 block has one MB Code data with layout VAEncFEIModeBufferH264Intel
> +     * Buffer size shall not be less than the number of 16x16 blocks multiplied by 
> +     * sizeof(VAEncFEIModeBufferH264Intel). 
> +     */
> +    VABufferID        mb_code_data;
> +    /** \brief Qp input buffer. It is valid only when mb_qp is set to 1. 
> +     * The data in this buffer correspond to the input source. 
> +     * One Qp per 16x16 block in raster scan order, each Qp is a signed char (8-bit) value. 
> +     **/
> +    VABufferID        qp;
>      /** \brief MV predictor. It is valid only when mv_predictor_enable is set to 1. 
>       * Each 16x16 block has one or more pair of motion vectors and the corresponding 
>       * reference indexes as defined by VAEncMVPredictorBufferH264. 16x16 block is in raster scan order. 
>       * Buffer size shall not be less than the number of 16x16 blocks multiplied by 
>       * sizeof(VAEncMVPredictorBufferH264). */
> -    VASurfaceID       mv_predictor;
> +    VABufferID        mv_predictor;
>  
>      /** \brief number of MV predictors. It must not be greater than maximum supported MV predictor. */
>      unsigned int      num_mv_predictors;
> @@ -95,18 +118,20 @@ typedef struct _VAEncMiscParameterFEIFrameControlH264Intel {
>  
>  /** \brief FEI MB level control data structure */
>  typedef struct _VAEncFEIMBControlH264Intel {
> -    /** \brief when set, correposndent MB is coded as skip */
> -    unsigned int force_to_skip       : 1;     
>      /** \brief when set, correposndent MB is coded as intra */
>      unsigned int force_to_intra      : 1;     
> -    unsigned int reserved1           : 30;    
> +    /** \brief when set, correposndent MB is coded as skip */
> +    unsigned int force_to_skip       : 1;     
> +    unsigned int reserved0           : 30;    
> +
> +    unsigned int reserved1;    
> +
> +    unsigned int reserved2;    
>  
>      /** \brief when mb_size_ctrl is set, size here is used to budget accumulatively. Set to 0xFF if don't care. */
> -    unsigned int max_size_in_word    : 8;     
> +    unsigned int reserved3           : 16;    
>      unsigned int target_size_in_word : 8;     
> -    unsigned int reserved2           : 16;    
> -
> -    unsigned int reserved3;    
> +    unsigned int max_size_in_word    : 8;     
>  } VAEncFEIMBControlH264Intel;
>  
> 
> diff --git a/va/vendor/intel/va_intel_statistics.h b/va/vendor/intel/va_intel_statistics.h
> index 8b326e1..8c2f77b 100644
> --- a/va/vendor/intel/va_intel_statistics.h
> +++ b/va/vendor/intel/va_intel_statistics.h
> @@ -56,29 +56,29 @@ typedef struct _VAStatsStatisticsParameter16x16Intel
>      VASurfaceID     *future_references;
>      unsigned int    num_future_references;
>  
> -    /** \brief ID of the output surface. 
> +    /** \brief ID of the output buffer. 
>       * The number of outputs is determined by below DisableMVOutput and DisableStatisticsOutput. 
>       * The output layout is defined by VAStatsStatisticsBufferType and VAStatsMotionVectorBufferType. 
>       **/
> -    VASurfaceID     *outputs;
> +    VABufferID      *outputs;
>  
>      /** \brief MV predictor. It is valid only when mv_predictor_ctrl is not 0. 
>       * Each 16x16 block has a pair of MVs, one for past and one for future reference 
>       * as defined by VAMotionVector. The 16x16 block is in raster scan order. 
>       * Buffer size shall not be less than the number of 16x16 blocks multiplied by sizeof(VAMotionVector). 
>       **/
> -    VASurfaceID     mv_predictor;
> +    VABufferID      mv_predictor;
>  
> -    /** \brief Qp input surface. It is valid only when mb_qp is set to 1. 
> +    /** \brief Qp input buffer. It is valid only when mb_qp is set to 1. 
>       * The data in this buffer correspond to the input source. 
>       * One Qp per 16x16 block in raster scan order, each Qp is a signed char (8-bit) value. 
>       **/
> -    VASurfaceID     qp;
> +    VABufferID      qp;
>  
>      unsigned int    frame_qp                    : 8;     
>      unsigned int    len_sp                      : 8;     
>      unsigned int    max_len_sp                  : 8;     
> -    unsigned int    reserved0                   : 8;     
> +    unsigned int    reserved0                   : 8;
>  
>      unsigned int    sub_mb_part_mask            : 7;     
>      unsigned int    sub_pel_mode                : 2;     
> @@ -105,31 +105,17 @@ typedef struct _VAStatsStatisticsParameter16x16Intel
>      unsigned int       disable_mv_output           : 1;    
>      /** \brief StatisticsOutput. When set to 1, Statistics output is NOT provided. */
>      unsigned int    disable_statistics_output   : 1;    
> -    unsigned int    reserved3                   : 30;    
> +    /** \brief interlaced.
> +     * 0  : progressive
> +     * 1  : top field
> +     * 2  : bottom field
> +     * 3-7: reserved
> +     **/
> +    unsigned int    interlaced                  : 3;
> +    unsigned int    reserved3                   : 27;    
>  
>  } VAStatsStatisticsParameter16x16Intel;
>  
> -/** \brief VAStatsMotionVectorBufferTypeIntel. Motion vector buffer layout.
> - * Motion vector output is per 4x4 block. For each 4x4 block there is a pair of past and future 
> - * reference MVs as defined in VAMotionVector. Depending on Subblock partition, 
> - * for the shape that is not 4x4, the MV is replicated so each 4x4 block has a pair of MVs. 
> - * If only past reference is used, future MV should be ignored, and vice versa. 
> - * The 16x16 block is in raster scan order, within the 16x16 block, each 4x4 block MV is ordered as below in memory. 
> - * The buffer size shall be greater than or equal to the number of 16x16 blocks multiplied by (sizeof(VAMotionVector) * 16).
> - *
> - *                      16x16 Block        
> - *        -----------------------------------------
> - *        |    1    |    2    |    5    |    6    |
> - *        -----------------------------------------
> - *        |    3    |    4    |    7    |    8    |
> - *        -----------------------------------------
> - *        |    9    |    10   |    13   |    14   |
> - *        -----------------------------------------
> - *        |    11   |    12   |    15   |    16   |
> - *        -----------------------------------------
> - *
> - **/
> -
>  /** \brief VAStatsStatisticsBufferTypeIntel. Statistics buffer layout.
>   * Statistics output is per 16x16 block. Data structure per 16x16 block is defined below. 
>   * The 16x16 block is in raster scan order. The buffer size shall be greater than or equal to 




More information about the Libva mailing list