Hi Kusanagi,

Am 06.03.2014 09:20, schrieb Kusanagi Kouichi:
Signed-off-by: Kusanagi Kouichi <sl...@ac.auone-net.jp>
---
  src/gallium/auxiliary/vl/vl_compositor.c | 52 +++++++++++++++++++++++++++++---
  src/gallium/auxiliary/vl/vl_compositor.h | 13 +++++++-
  2 files changed, 60 insertions(+), 5 deletions(-)

diff --git a/src/gallium/auxiliary/vl/vl_compositor.c 
b/src/gallium/auxiliary/vl/vl_compositor.c
index 3cea044..031efb3 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -570,6 +570,10 @@ calc_src_and_dst(struct vl_compositor_layer *layer, 
unsigned width, unsigned hei
     layer->src.br = calc_bottomright(size, src);
     layer->dst.tl = calc_topleft(size, dst);
     layer->dst.br = calc_bottomright(size, dst);
+   layer->dst.tr.x = layer->dst.br.x;
+   layer->dst.tr.y = layer->dst.tl.y;
+   layer->dst.bl.x = layer->dst.tl.x;
+   layer->dst.bl.y = layer->dst.br.y;
     layer->zw.x = 0.0f;
     layer->zw.y = size.y;
  }
@@ -589,8 +593,8 @@ gen_rect_verts(struct vertex2f *vb, struct 
vl_compositor_layer *layer)
     vb[ 4].x = layer->colors[0].z;
     vb[ 4].y = layer->colors[0].w;
- vb[ 5].x = layer->dst.br.x;
-   vb[ 5].y = layer->dst.tl.y;
+   vb[ 5].x = layer->dst.tr.x;
+   vb[ 5].y = layer->dst.tr.y;
     vb[ 6].x = layer->src.br.x;
     vb[ 6].y = layer->src.tl.y;
     vb[ 7] = layer->zw;
@@ -609,8 +613,8 @@ gen_rect_verts(struct vertex2f *vb, struct 
vl_compositor_layer *layer)
     vb[14].x = layer->colors[2].z;
     vb[14].y = layer->colors[2].w;
- vb[15].x = layer->dst.tl.x;
-   vb[15].y = layer->dst.br.y;
+   vb[15].x = layer->dst.bl.x;
+   vb[15].y = layer->dst.bl.y;
     vb[16].x = layer->src.tl.x;
     vb[16].y = layer->src.br.y;
     vb[17] = layer->zw;

A good start, but I would prefer that you do the rotation in gen_rect_verts instead and keep dst as it is. Also please define an enum for the rotation, make this enum compatible with VDPAU and have static asserts in the VDPAU state tracker on this assumption.

Thx for working on this,
Christian.

@@ -964,6 +968,46 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state *s,
  }
void
+vl_compositor_rotate_layer(struct vl_compositor_state *s,
+                           unsigned layer,
+                           int rotate)
+{
+   struct vl_compositor_layer *l;
+   struct vertex2f v;
+
+   assert(s);
+   assert(layer < VL_COMPOSITOR_MAX_LAYERS);
+
+   l = &s->layers[layer];
+   switch (rotate) {
+   case 1:
+      v = l->dst.tl;
+      l->dst.tl = l->dst.tr;
+      l->dst.tr = l->dst.br;
+      l->dst.br = l->dst.bl;
+      l->dst.bl = v;
+      break;
+   case 2:
+      v = l->dst.tl;
+      l->dst.tl = l->dst.br;
+      l->dst.br = v;
+      v = l->dst.tr;
+      l->dst.tr = l->dst.bl;
+      l->dst.bl = v;
+      break;
+   case 3:
+      v = l->dst.bl;
+      l->dst.bl = l->dst.br;
+      l->dst.br = l->dst.tr;
+      l->dst.tr = l->dst.tl;
+      l->dst.tl = v;
+      break;
+   default:
+      break;
+   }
+}
+
+void
  vl_compositor_render(struct vl_compositor_state *s,
                       struct vl_compositor       *c,
                       struct pipe_surface        *dst_surface,
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h 
b/src/gallium/auxiliary/vl/vl_compositor.h
index 97cbef0..38383d8 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -67,7 +67,10 @@ struct vl_compositor_layer
     struct pipe_sampler_view *sampler_views[3];
     struct {
        struct vertex2f tl, br;
-   } src, dst;
+   } src;
+   struct {
+      struct vertex2f tl, tr, br, bl;
+   } dst;
     struct vertex2f zw;
     struct vertex4f colors[4];
  };
@@ -216,6 +219,14 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state 
*state,
                               struct u_rect *dst_rect,
                               struct vertex4f *colors);
+/**
+ * rotate a layer
+ */
+void
+vl_compositor_rotate_layer(struct vl_compositor_state *state,
+                           unsigned layer,
+                           int rotate);
+
  /*@}*/
/**

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

Reply via email to