[Libva] [PATCH] Fix scaling of NV12 surfaces when no output_region is set

Xiang, Haihao haihao.xiang at intel.com
Mon Jan 5 21:40:13 PST 2015


Applied.

Thanks
Haihao

> The code block filling destination surface target rectangle is too early 
> and incorrectly fills input surface width & height as final target width 
> and height. This results in improper scaling of the source surface.
> 
> Move the destination code block further below the point when actual 
> target surface is referenced and its width and height are known and use 
> them to fill the destination rectangle.
> 
> Signed-off-by: Antti Seppälä <a.seppala at gmail.com>
> ---
>  src/i965_post_processing.c | 24 ++++++++++++------------
>  1 file changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/src/i965_post_processing.c b/src/i965_post_processing.c
> index 865dc3f..0481408 100755
> --- a/src/i965_post_processing.c
> +++ b/src/i965_post_processing.c
> @@ -5550,18 +5550,6 @@ i965_proc_picture(VADriverContextP ctx,
>          src_rect.height = in_height;
>      }
>  
> -    if (pipeline_param->output_region) {
> -        dst_rect.x = pipeline_param->output_region->x;
> -        dst_rect.y = pipeline_param->output_region->y;
> -        dst_rect.width = pipeline_param->output_region->width;
> -        dst_rect.height = pipeline_param->output_region->height;
> -    } else {
> -        dst_rect.x = 0;
> -        dst_rect.y = 0;
> -        dst_rect.width = in_width;
> -        dst_rect.height = in_height;
> -    }
> -
>      proc_context->pp_context.pipeline_param = pipeline_param;
>  
>      for (i = 0; i < pipeline_param->num_filters; i++) {
> @@ -5621,6 +5609,18 @@ i965_proc_picture(VADriverContextP ctx,
>          goto error;
>      }
>  
> +    if (pipeline_param->output_region) {
> +        dst_rect.x = pipeline_param->output_region->x;
> +        dst_rect.y = pipeline_param->output_region->y;
> +        dst_rect.width = pipeline_param->output_region->width;
> +        dst_rect.height = pipeline_param->output_region->height;
> +    } else {
> +        dst_rect.x = 0;
> +        dst_rect.y = 0;
> +        dst_rect.width = obj_surface->orig_width;
> +        dst_rect.height = obj_surface->orig_height;
> +    }
> +
>      int csc_needed = 0;
>      if (obj_surface->fourcc && obj_surface->fourcc !=  VA_FOURCC_NV12){
>          csc_needed = 1;




More information about the Libva mailing list