[Mesa-dev] [PATCH v2 1/2] vl: Add rotation
Christian König
deathsimple at vodafone.de
Fri Mar 7 00:41:44 PST 2014
I've added resetting the rotate in clear_layers, fixed calc_drawn_area
and then committed the result.
Thx for the help,
Christian.
Am 07.03.2014 03:07, schrieb Kusanagi Kouichi:
> Signed-off-by: Kusanagi Kouichi <slash at ac.auone-net.jp>
> ---
> src/gallium/auxiliary/vl/vl_compositor.c | 64 ++++++++++++++++++++++++++++----
> src/gallium/auxiliary/vl/vl_compositor.h | 18 +++++++++
> 2 files changed, 74 insertions(+), 8 deletions(-)
>
> diff --git a/src/gallium/auxiliary/vl/vl_compositor.c b/src/gallium/auxiliary/vl/vl_compositor.c
> index 3cea044..ad08b52 100644
> --- a/src/gallium/auxiliary/vl/vl_compositor.c
> +++ b/src/gallium/auxiliary/vl/vl_compositor.c
> @@ -577,10 +577,48 @@ calc_src_and_dst(struct vl_compositor_layer *layer, unsigned width, unsigned hei
> static void
> gen_rect_verts(struct vertex2f *vb, struct vl_compositor_layer *layer)
> {
> + struct vertex2f tl, tr, br, bl;
> +
> assert(vb && layer);
>
> - vb[ 0].x = layer->dst.tl.x;
> - vb[ 0].y = layer->dst.tl.y;
> + switch (layer->rotate) {
> + default:
> + case VL_COMPOSITOR_ROTATE_0:
> + tl = layer->dst.tl;
> + tr.x = layer->dst.br.x;
> + tr.y = layer->dst.tl.y;
> + br = layer->dst.br;
> + bl.x = layer->dst.tl.x;
> + bl.y = layer->dst.br.y;
> + break;
> + case VL_COMPOSITOR_ROTATE_90:
> + tl.x = layer->dst.br.x;
> + tl.y = layer->dst.tl.y;
> + tr = layer->dst.br;
> + br.x = layer->dst.tl.x;
> + br.y = layer->dst.br.y;
> + bl = layer->dst.tl;
> + break;
> + case VL_COMPOSITOR_ROTATE_180:
> + tl = layer->dst.br;
> + tr.x = layer->dst.tl.x;
> + tr.y = layer->dst.br.y;
> + br = layer->dst.tl;
> + bl.x = layer->dst.br.x;
> + bl.y = layer->dst.tl.y;
> + break;
> + case VL_COMPOSITOR_ROTATE_270:
> + tl.x = layer->dst.tl.x;
> + tl.y = layer->dst.br.y;
> + tr = layer->dst.tl;
> + br.x = layer->dst.br.x;
> + br.y = layer->dst.tl.y;
> + bl = layer->dst.br;
> + break;
> + }
> +
> + vb[ 0].x = tl.x;
> + vb[ 0].y = tl.y;
> vb[ 1].x = layer->src.tl.x;
> vb[ 1].y = layer->src.tl.y;
> vb[ 2] = layer->zw;
> @@ -589,8 +627,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 = tr.x;
> + vb[ 5].y = tr.y;
> vb[ 6].x = layer->src.br.x;
> vb[ 6].y = layer->src.tl.y;
> vb[ 7] = layer->zw;
> @@ -599,8 +637,8 @@ gen_rect_verts(struct vertex2f *vb, struct vl_compositor_layer *layer)
> vb[ 9].x = layer->colors[1].z;
> vb[ 9].y = layer->colors[1].w;
>
> - vb[10].x = layer->dst.br.x;
> - vb[10].y = layer->dst.br.y;
> + vb[10].x = br.x;
> + vb[10].y = br.y;
> vb[11].x = layer->src.br.x;
> vb[11].y = layer->src.br.y;
> vb[12] = layer->zw;
> @@ -609,8 +647,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 = bl.x;
> + vb[15].y = bl.y;
> vb[16].x = layer->src.tl.x;
> vb[16].y = layer->src.br.y;
> vb[17] = layer->zw;
> @@ -964,6 +1002,16 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state *s,
> }
>
> void
> +vl_compositor_set_layer_rotation(struct vl_compositor_state *s,
> + unsigned layer,
> + enum vl_compositor_rotation rotate)
> +{
> + assert(s);
> + assert(layer < VL_COMPOSITOR_MAX_LAYERS);
> + s->layers[layer].rotate = rotate;
> +}
> +
> +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..934b634 100644
> --- a/src/gallium/auxiliary/vl/vl_compositor.h
> +++ b/src/gallium/auxiliary/vl/vl_compositor.h
> @@ -53,6 +53,15 @@ enum vl_compositor_deinterlace
> VL_COMPOSITOR_BOB_BOTTOM
> };
>
> +/* clockwise degree */
> +enum vl_compositor_rotation
> +{
> + VL_COMPOSITOR_ROTATE_0,
> + VL_COMPOSITOR_ROTATE_90,
> + VL_COMPOSITOR_ROTATE_180,
> + VL_COMPOSITOR_ROTATE_270
> +};
> +
> struct vl_compositor_layer
> {
> bool clearing;
> @@ -70,6 +79,7 @@ struct vl_compositor_layer
> } src, dst;
> struct vertex2f zw;
> struct vertex4f colors[4];
> + enum vl_compositor_rotation rotate;
> };
>
> struct vl_compositor_state
> @@ -216,6 +226,14 @@ vl_compositor_set_rgba_layer(struct vl_compositor_state *state,
> struct u_rect *dst_rect,
> struct vertex4f *colors);
>
> +/**
> + * set the layer rotation
> + */
> +void
> +vl_compositor_set_layer_rotation(struct vl_compositor_state *state,
> + unsigned layer,
> + enum vl_compositor_rotation rotate);
> +
> /*@}*/
>
> /**
More information about the mesa-dev
mailing list