summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/vl
diff options
context:
space:
mode:
authorLeo Liu <[email protected]>2017-08-28 20:58:48 -0400
committerLeo Liu <[email protected]>2017-09-07 13:32:36 -0400
commita6da7e6c3a405633b8e31b1185c3e7447b06ca89 (patch)
tree6bcc6f6ed7865e968ffa063db82c55c9e7c1261c /src/gallium/auxiliary/vl
parent4bd2bdbb3c1df08c185b7461474ce9b323fc1b7d (diff)
vl/compositor: make a helper function for YUV deinterlacing
The similar function is in OMX, and only used by OMX. Now have it moved to vl/compositor for other state tracker to use later. Signed-off-by: Leo Liu <[email protected]> Reviewed-by: Christian König <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/vl')
-rw-r--r--src/gallium/auxiliary/vl/vl_compositor.c31
-rw-r--r--src/gallium/auxiliary/vl/vl_compositor.h9
2 files changed, 40 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/vl/vl_compositor.c b/src/gallium/auxiliary/vl/vl_compositor.c
index a79bf112646..6963a565070 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.c
+++ b/src/gallium/auxiliary/vl/vl_compositor.c
@@ -1215,6 +1215,37 @@ vl_compositor_render(struct vl_compositor_state *s,
draw_layers(c, s, dirty_area);
}
+void
+vl_compositor_yuv_deint(struct vl_compositor_state *s,
+ struct vl_compositor *c,
+ struct pipe_video_buffer *src,
+ struct pipe_video_buffer *dst)
+{
+ struct pipe_surface **dst_surfaces;
+ struct u_rect dst_rect;
+
+ dst_surfaces = dst->get_surfaces(dst);
+ vl_compositor_clear_layers(s);
+
+ dst_rect.x0 = 0;
+ dst_rect.x1 = src->width;
+ dst_rect.y0 = 0;
+ dst_rect.y1 = src->height;
+
+ vl_compositor_set_yuv_layer(s, c, 0, src, NULL, NULL, true);
+ vl_compositor_set_layer_dst_area(s, 0, &dst_rect);
+ vl_compositor_render(s, c, dst_surfaces[0], NULL, false);
+
+ dst_rect.x1 /= 2;
+ dst_rect.y1 /= 2;
+
+ vl_compositor_set_yuv_layer(s, c, 0, src, NULL, 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);
+}
+
bool
vl_compositor_init(struct vl_compositor *c, struct pipe_context *pipe)
{
diff --git a/src/gallium/auxiliary/vl/vl_compositor.h b/src/gallium/auxiliary/vl/vl_compositor.h
index 535abb75cd1..88a54efdb82 100644
--- a/src/gallium/auxiliary/vl/vl_compositor.h
+++ b/src/gallium/auxiliary/vl/vl_compositor.h
@@ -276,4 +276,13 @@ vl_compositor_cleanup(struct vl_compositor *compositor);
void
vl_compositor_cleanup_state(struct vl_compositor_state *state);
+/**
+ * deinterlace yuv buffer
+ */
+void
+vl_compositor_yuv_deint(struct vl_compositor_state *state,
+ struct vl_compositor *compositor,
+ struct pipe_video_buffer *src,
+ struct pipe_video_buffer *dst);
+
#endif /* vl_compositor_h */