[Libva] [intel-driver][PATCH 1/2] i965_drv: add support for per-codec max resolution

Xiang, Haihao haihao.xiang at intel.com
Wed Jun 8 02:17:35 UTC 2016


Thanks for the two patches, applied.

> Add a functor to hw_codec_info to allow each hw instance to report
> maximum resolution on a per-codec basis.
> 
> Signed-off-by: U. Artie Eoff <ullysses.a.eoff at intel.com>
> ---
>  src/i965_drv_video.c | 32 +++++++++++++++++++++++++++-----
>  src/i965_drv_video.h |  9 +++++++++
>  2 files changed, 36 insertions(+), 5 deletions(-)
> 
> diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c
> index efac5a5506cb..66cdb9e5a8cc 100644
> --- a/src/i965_drv_video.c
> +++ b/src/i965_drv_video.c
> @@ -2130,6 +2130,20 @@ i965_destroy_context(struct object_heap *heap,
> struct object_base *obj)
>      object_heap_free(heap, obj);
>  }
>  
> +static inline void
> +max_resolution(struct i965_driver_data *i965,
> +               struct object_config *obj_config,
> +               int *w,                                  /* out */
> +               int *h)                                  /* out */
> +{
> +    if (i965->codec_info->max_resolution) {
> +        i965->codec_info->max_resolution(i965, obj_config, w, h);
> +    } else {
> +        *w = i965->codec_info->max_width;
> +        *h = i965->codec_info->max_height;
> +    }
> +}
> +
>  VAStatus
>  i965_CreateContext(VADriverContextP ctx,
>                     VAConfigID config_id,
> @@ -2147,14 +2161,18 @@ i965_CreateContext(VADriverContextP ctx,
>      VAStatus vaStatus = VA_STATUS_SUCCESS;
>      int contextID;
>      int i;
> +    int max_width;
> +    int max_height;
>  
>      if (NULL == obj_config) {
>          vaStatus = VA_STATUS_ERROR_INVALID_CONFIG;
>          return vaStatus;
>      }
>  
> -    if (picture_width > i965->codec_info->max_width ||
> -        picture_height > i965->codec_info->max_height) {
> +    max_resolution(i965, obj_config, &max_width, &max_height);
> +
> +    if (picture_width > max_width ||
> +        picture_height > max_height) {
>          vaStatus = VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED;
>          return vaStatus;
>      }
> @@ -5485,7 +5503,9 @@ i965_QuerySurfaceAttributes(VADriverContextP
> ctx,
>      struct object_config *obj_config;
>      int i = 0;
>      VASurfaceAttrib *attribs = NULL;
> -    
> +    int max_width;
> +    int max_height;
> +
>      if (config == VA_INVALID_ID)
>          return VA_STATUS_ERROR_INVALID_CONFIG;
>  
> @@ -5873,16 +5893,18 @@ i965_QuerySurfaceAttributes(VADriverContextP
> ctx,
>      attribs[i].value.value.p = NULL; /* ignore */
>      i++;
>  
> +    max_resolution(i965, obj_config, &max_width, &max_height);
> +
>      attribs[i].type = VASurfaceAttribMaxWidth;
>      attribs[i].value.type = VAGenericValueTypeInteger;
>      attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE;
> -    attribs[i].value.value.i = i965->codec_info->max_width;
> +    attribs[i].value.value.i = max_width;
>      i++;
>  
>      attribs[i].type = VASurfaceAttribMaxHeight;
>      attribs[i].value.type = VAGenericValueTypeInteger;
>      attribs[i].flags = VA_SURFACE_ATTRIB_GETTABLE;
> -    attribs[i].value.value.i = i965->codec_info->max_height;
> +    attribs[i].value.value.i = max_height;
>      i++;
>  
>      if (i > *num_attribs) {
> diff --git a/src/i965_drv_video.h b/src/i965_drv_video.h
> index b8d61a16024d..47e27d0fa77e 100644
> --- a/src/i965_drv_video.h
> +++ b/src/i965_drv_video.h
> @@ -354,6 +354,8 @@ struct i965_filter
>      int ring;
>  };
>  
> +struct i965_driver_data;
> +
>  struct hw_codec_info
>  {
>      struct hw_context *(*dec_hw_context_init)(VADriverContextP,
> struct object_config *);
> @@ -363,6 +365,13 @@ struct hw_codec_info
>      void (*post_processing_context_init)(VADriverContextP, void *,
> struct intel_batchbuffer *);
>      void (*preinit_hw_codec)(VADriverContextP, struct hw_codec_info
> *);
>  
> +    /**
> +     * Allows HW info to support per-codec max resolution.  If this
> functor is
> +     * not initialized, then @max_width and @max_height will be used
> as the
> +     * default maximum resolution for all codecs on this HW info.
> +     */
> +    void (*max_resolution)(struct i965_driver_data *, struct
> object_config *, int *, int *);
> +
>      int max_width;
>      int max_height;
>      int min_linear_wpitch;


More information about the Libva mailing list