Hi ilia,

I saw the function u_box_clip_2d(https://cgit.freedesktop.org/mesa/mesa/tree/src/gallium/auxiliary/util/u_box.h#n74).

But I still don't quite understand why we need to do this? Or say, what will happen if we don't do this box clipping here? Can you provide more information about this please?


Regards,

Boyuan


On 2018-10-05 12:11 PM, Ilia Mirkin wrote:
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.zh...@amd.com> wrote:
From: Boyuan Zhang <boyuan.zh...@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.zh...@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


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to