vl/compositor: add a new function for YUV deint
authorLeo Liu <leo.liu@amd.com>
Fri, 15 Sep 2017 18:19:34 +0000 (14:19 -0400)
committerLeo Liu <leo.liu@amd.com>
Mon, 25 Sep 2017 13:42:13 +0000 (09:42 -0400)
It will replace previous deint function with abilities of
scaling and field deinterlacing

Acked-by: Christian König <christian.koenig@amd.com>
src/gallium/auxiliary/vl/vl_compositor.c
src/gallium/auxiliary/vl/vl_compositor.h

index 49707471f4775d666272f99a1d5fee4f933d7d0b..37a784742db28b79849680fd24452439124b297e 100644 (file)
@@ -1181,6 +1181,36 @@ vl_compositor_set_layer_rotation(struct vl_compositor_state *s,
    s->layers[layer].rotate = rotate;
 }
 
+void
+vl_compositor_yuv_deint_full(struct vl_compositor_state *s,
+                             struct vl_compositor *c,
+                             struct pipe_video_buffer *src,
+                             struct pipe_video_buffer *dst,
+                             struct u_rect *src_rect,
+                             struct u_rect *dst_rect,
+                             enum vl_compositor_deinterlace deinterlace)
+{
+   struct pipe_surface **dst_surfaces;
+
+   dst_surfaces = dst->get_surfaces(dst);
+   vl_compositor_clear_layers(s);
+
+   set_yuv_layer(s, c, 0, src, src_rect, NULL, true);
+   vl_compositor_set_layer_dst_area(s, 0, dst_rect);
+   vl_compositor_render(s, c, dst_surfaces[0], NULL, false);
+
+   if (dst_rect) {
+      dst_rect->x1 /= 2;
+      dst_rect->y1 /= 2;
+   }
+
+   set_yuv_layer(s, c, 0, src, src_rect, NULL, false);
+   vl_compositor_set_layer_dst_area(s, 0, dst_rect);
+   vl_compositor_render(s, c, dst_surfaces[1], NULL, false);
+
+   s->pipe->flush(s->pipe, NULL, 0);
+}
+
 void
 vl_compositor_render(struct vl_compositor_state *s,
                      struct vl_compositor       *c,
index 0918328544934e506524588560bc0f998e00315a..2fb5a3c53eb35e00d816d21f470fcb027a0b2fa3 100644 (file)
@@ -246,6 +246,18 @@ vl_compositor_set_layer_rotation(struct vl_compositor_state *state,
                                  unsigned layer,
                                  enum vl_compositor_rotation rotate);
 
+/**
+ * deinterlace yuv buffer with full abilities
+ */
+void
+vl_compositor_yuv_deint_full(struct vl_compositor_state *state,
+                             struct vl_compositor *compositor,
+                             struct pipe_video_buffer *src,
+                             struct pipe_video_buffer *dst,
+                             struct u_rect *src_rect,
+                             struct u_rect *dst_rect,
+                             enum vl_compositor_deinterlace deinterlace);
+
 /*@}*/
 
 /**