[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