On Tuesday 13 Sep 2016 at 15:10:49 (+0800), Xiang, Haihao writes :
> Cherry-pick'ed from:
> e6f92ae: Added geneirc support for encoding bit-rate control per temporal 
> layer
> 753ec17: va.h: add data structure for the structure of temporal layer encoding
> 
> v2: Update the comment that user must send 
> VAEncMiscParameterTemporalLayerStructure before
> VAEncMiscParameterRateControl and VAEncMiscParameterFrameRate and the 
> condition for error return

good addition of the comment, lgtm.

applied with other two patches.

thanks,

Sean

> 
> Signed-off-by: Jonathan Bian <jonathan.b...@intel.com>
> Signed-off-by: Austin Yuan <shengquan.y...@intel.com>
> Signed-off-by: Zhangfei Zhang <zhangfei.zh...@intel.com>
> Signed-off-by: Xiang, Haihao <haihao.xi...@intel.com>
> ---
>  va/va.h | 87 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 86 insertions(+), 1 deletion(-)
> 
> diff --git a/va/va.h b/va/va.h
> index ef8595a..e919f6f 100644
> --- a/va/va.h
> +++ b/va/va.h
> @@ -471,6 +471,15 @@ typedef enum
>       * VAEncMiscParameterTypeROI.
>       */
>      VAConfigAttribEncROI              = 25,
> +    /**
> +     * \brief Encoding extended rate control attribute. Read-only.
> +     *
> +     * This attribute conveys whether the driver supports any extended rate 
> control features
> +     * The attribute value is partitioned into fields as defined in the
> +     * VAConfigAttribValEncRateControlExt union.
> +     */
> +    VAConfigAttribEncRateControlExt   = 26,
> +
>      /**@}*/
>      VAConfigAttribTypeMax
>  } VAConfigAttribType;
> @@ -622,6 +631,47 @@ typedef union _VAConfigAttribValEncROI {
>       unsigned int value;
>  } VAConfigAttribValEncROI;
>  
> +/** \brief Attribute value for VAConfigAttribEncRateControlExt */
> +typedef union _VAConfigAttribValEncRateControlExt {
> +    struct {
> +        /**
> +         * \brief The maximum number of temporal layers minus 1
> +         *
> +         * \ref max_num_temporal_layers_minus1 plus 1 specifies the maximum 
> number of temporal
> +         * layers that supported by the underlying driver. \ref 
> max_num_temporal_layers_minus1
> +         * equal to 0 implies the underlying driver doesn't support encoding 
> with temporal layer.
> +         */
> +        unsigned int max_num_temporal_layers_minus1      : 8;
> +
> +        /**
> +         * /brief support temporal layer bit-rate control flag
> +         *
> +         * \ref temporal_layer_bitrate_control_flag equal to 1 specifies the 
> underlying driver
> +         * can support bit-rate control per temporal layer when 
> (#VAConfigAttribRateControl == #VA_RC_CBR ||
> +         * #VAConfigAttribRateControl == #VA_RC_VBR).
> +         *
> +         * The underlying driver must set \ref 
> temporal_layer_bitrate_control_flag to 0 when
> +         * \c max_num_temporal_layers_minus1 is equal to 0
> +         *
> +         * To use bit-rate control per temporal layer, an application must 
> send the right layer
> +         * structure via #VAEncMiscParameterTemporalLayerStructure at the 
> beginning of a coded sequence
> +         * and then followed by #VAEncMiscParameterRateControl and 
> #VAEncMiscParameterFrameRate structures
> +         * for each layer, using the \c temporal_id field as the layer 
> identifier. Otherwise
> +         * the driver doesn't use bitrate control per temporal layer if an 
> application doesn't send the
> +         * layer structure via #VAEncMiscParameterTemporalLayerStructure to 
> the driver. The driver returns
> +         * VA_STATUS_ERROR_INVALID_PARAMETER if an application sends a wrong 
> layer structure or doesn't send
> +         * #VAEncMiscParameterRateControl and #VAEncMiscParameterFrameRate 
> for each layer.
> +         *
> +         * The driver will ignore #VAEncMiscParameterTemporalLayerStructure 
> and the \c temporal_id field
> +         * in #VAEncMiscParameterRateControl and 
> #VAEncMiscParameterFrameRate if
> +         * \ref temporal_layer_bitrate_control_flag is equal to 0 or 
> #VAConfigAttribRateControl == #VA_RC_CQP
> +         */
> +        unsigned int temporal_layer_bitrate_control_flag : 1;
> +        unsigned int reserved                            : 23;
> +    } bits;
> +    unsigned int value;
> +} VAConfigAttribValEncRateControlExt;
> +
>  /**
>   * if an attribute is not applicable for a given
>   * profile/entrypoint pair, then set the value to the following 
> @@ -1097,7 +1147,9 @@ typedef enum
>        * rate control, when the user has externally skipped frames. */
>      VAEncMiscParameterTypeSkipFrame     = 9,
>      /** \brief Buffer type used for region-of-interest (ROI) parameters. */
> -    VAEncMiscParameterTypeROI           = 10
> +    VAEncMiscParameterTypeROI           = 10,
> +    /** \brief Buffer type used for temporal layer structure */
> +    VAEncMiscParameterTypeTemporalLayerStructure   = 12,
>  } VAEncMiscParameterType;
>  
>  /** \brief Packed header type. */
> @@ -1154,6 +1206,22 @@ typedef struct _VAEncMiscParameterBuffer
>      unsigned int data[0];
>  } VAEncMiscParameterBuffer;
>  
> +/** \brief Temporal layer Structure*/
> +typedef struct _VAEncMiscParameterTemporalLayerStructure
> +{
> +    /** \brief The number of temporal layers */
> +    unsigned int number_of_layers;
> +    /** \brief The length of the array defining frame layer membership. 
> Should be 1-32 */
> +    unsigned int periodicity;
> +    /**
> +     * \brief The array indicating the layer id for each frame
> +     *
> +     * The layer id for the first frame in a coded sequence is always 0, so 
> layer_id[] specifies the layer
> +     * ids for frames starting from the 2nd frame.
> +     */
> +    unsigned int layer_id[32];
> +} VAEncMiscParameterTemporalLayerStructure;
> +
>  
>  /** \brief Rate control parameters */
>  typedef struct _VAEncMiscParameterRateControl
> @@ -1181,6 +1249,11 @@ typedef struct _VAEncMiscParameterRateControl
>              unsigned int disable_frame_skip : 1; /* Disable frame skip in 
> rate control mode */
>              unsigned int disable_bit_stuffing : 1; /* Disable bit stuffing 
> in rate control mode */
>              unsigned int mb_rate_control : 4; /* Control VA_RC_MB 0: 
> default, 1: enable, 2: disable, other: reserved*/
> +            /*
> +             * The temporal layer that the rate control parameters are 
> specified for.
> +             */
> +            unsigned int temporal_id : 8;
> +            unsigned int reserved : 17;
>          } bits;
>          unsigned int value;
>      } rc_flags;
> @@ -1189,6 +1262,18 @@ typedef struct _VAEncMiscParameterRateControl
>  typedef struct _VAEncMiscParameterFrameRate
>  {
>      unsigned int framerate;
> +    union
> +    {
> +        struct
> +        {
> +            /*
> +             * The temporal id the framerate parameters are specified for.
> +             */
> +            unsigned int temporal_id : 8;
> +            unsigned int reserved : 24;
> +         } bits;
> +         unsigned int value;
> +     } framerate_flags;
>  } VAEncMiscParameterFrameRate;
>  
>  /**
> -- 
> 1.9.1
> 
> _______________________________________________
> Libva mailing list
> Libva@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/libva

-- 
-- 
Sean V. Kelley <sean.v.kel...@intel.com>
Open Source Technology Center / SSG
Intel Corp.

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Libva mailing list
Libva@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libva

Reply via email to