[Mesa-dev] [PATCH] st/va: use provided sizes and coords for getimage

Christian König ckoenig.leichtzumerken at gmail.com
Fri Oct 5 16:49:22 UTC 2018


If that also fixes the problem, then yeah that makes perfect sense to me 
as well.

Christian.

Am 05.10.2018 um 18:11 schrieb Ilia Mirkin:
> This is an improvement, but I think you need to clip the box to
>
> 1. Size of the surface
> 2. Size of the image
>
> I think that there are clipping helpers available to do that (maybe
> pipe_box_clip or so? I forget, check the auxiliary dir). Christian -
> does that make sense to you?
>
> Cheers,
>
>    -ilia
> On Fri, Oct 5, 2018 at 12:01 PM <boyuan.zhang at amd.com> wrote:
>> From: Boyuan Zhang <boyuan.zhang at amd.com>
>>
>> vlVaGetImage should respect the width, height, and coordinates x and y that
>> passed in. Therefore, pipe_box should be created with the passed in values
>> instead of surface width/height.
>>
>> Signed-off-by: Boyuan Zhang <boyuan.zhang at amd.com>
>> ---
>>   src/gallium/state_trackers/va/image.c | 9 ++++++---
>>   1 file changed, 6 insertions(+), 3 deletions(-)
>>
>> diff --git a/src/gallium/state_trackers/va/image.c b/src/gallium/state_trackers/va/image.c
>> index 3f892c9..c9f6f18 100644
>> --- a/src/gallium/state_trackers/va/image.c
>> +++ b/src/gallium/state_trackers/va/image.c
>> @@ -400,11 +400,14 @@ vlVaGetImage(VADriverContextP ctx, VASurfaceID surface, int x, int y,
>>      }
>>
>>      for (i = 0; i < vaimage->num_planes; i++) {
>> -      unsigned width, height;
>> +      unsigned w = align(width, 2);
>> +      unsigned h = align(height, 2);
>>         if (!views[i]) continue;
>> -      vlVaVideoSurfaceSize(surf, i, &width, &height);
>> +      vl_video_buffer_adjust_size(&w, &h, i,
>> +                                  surf->templat.chroma_format,
>> +                                  surf->templat.interlaced);
>>         for (j = 0; j < views[i]->texture->array_size; ++j) {
>> -         struct pipe_box box = {0, 0, j, width, height, 1};
>> +         struct pipe_box box = {x, y, j, w, h, 1};
>>            struct pipe_transfer *transfer;
>>            uint8_t *map;
>>            map = drv->pipe->transfer_map(drv->pipe, views[i]->texture, 0,
>> --
>> 2.7.4
>>



More information about the mesa-dev mailing list