diff options
author | Leo Liu <[email protected]> | 2017-08-28 20:58:48 -0400 |
---|---|---|
committer | Leo Liu <[email protected]> | 2017-09-07 13:32:36 -0400 |
commit | a6da7e6c3a405633b8e31b1185c3e7447b06ca89 (patch) | |
tree | 6bcc6f6ed7865e968ffa063db82c55c9e7c1261c /src/gallium | |
parent | 4bd2bdbb3c1df08c185b7461474ce9b323fc1b7d (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')
-rw-r--r-- | src/gallium/auxiliary/vl/vl_compositor.c | 31 | ||||
-rw-r--r-- | src/gallium/auxiliary/vl/vl_compositor.h | 9 |
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 */ |