#ifndef vl_compositor_h
#define vl_compositor_h
-#include <pipe/p_compiler.h>
#include <pipe/p_state.h>
+#include <pipe/p_video_context.h>
#include <pipe/p_video_state.h>
-#include "vl_types.h"
struct pipe_context;
-struct pipe_texture;
#define VL_COMPOSITOR_MAX_LAYERS 16
+struct vl_compositor_layer
+{
+ void *fs;
+ struct pipe_sampler_view *sampler_views[3];
+ struct pipe_video_rect src_rect;
+ struct pipe_video_rect dst_rect;
+};
+
struct vl_compositor
{
+ struct pipe_video_compositor base;
struct pipe_context *pipe;
struct pipe_framebuffer_state fb_state;
- struct vertex2f fb_inv_size;
- void *sampler;
- void *vertex_shader;
- void *fragment_shader;
struct pipe_viewport_state viewport;
struct pipe_vertex_buffer vertex_buf;
- struct pipe_vertex_element vertex_elems[2];
- struct pipe_buffer *fs_const_buf;
-
- struct pipe_texture *bg;
- struct pipe_video_rect bg_src_rect;
- bool dirty_bg;
- struct pipe_texture *layers[VL_COMPOSITOR_MAX_LAYERS];
- struct pipe_video_rect layer_src_rects[VL_COMPOSITOR_MAX_LAYERS];
- struct pipe_video_rect layer_dst_rects[VL_COMPOSITOR_MAX_LAYERS];
- unsigned dirty_layers;
-};
-
-bool vl_compositor_init(struct vl_compositor *compositor, struct pipe_context *pipe);
-
-void vl_compositor_cleanup(struct vl_compositor *compositor);
+ struct pipe_resource *csc_matrix;
-void vl_compositor_set_background(struct vl_compositor *compositor,
- struct pipe_texture *bg, struct pipe_video_rect *bg_src_rect);
+ void *sampler;
+ void *blend;
+ void *vertex_elems_state;
-void vl_compositor_set_layers(struct vl_compositor *compositor,
- struct pipe_texture *layers[],
- struct pipe_video_rect *src_rects[],
- struct pipe_video_rect *dst_rects[],
- unsigned num_layers);
+ void *vs;
+ void *fs_video_buffer;
+ void *fs_palette;
+ void *fs_rgba;
-void vl_compositor_render(struct vl_compositor *compositor,
- struct pipe_texture *src_surface,
- enum pipe_mpeg12_picture_type picture_type,
- /*unsigned num_past_surfaces,
- struct pipe_texture *past_surfaces,
- unsigned num_future_surfaces,
- struct pipe_texture *future_surfaces,*/
- struct pipe_video_rect *src_area,
- struct pipe_texture *dst_surface,
- struct pipe_video_rect *dst_area,
- struct pipe_fence_handle **fence);
+ unsigned used_layers:VL_COMPOSITOR_MAX_LAYERS;
+ struct vl_compositor_layer layers[VL_COMPOSITOR_MAX_LAYERS];
+};
-void vl_compositor_set_csc_matrix(struct vl_compositor *compositor, const float *mat);
+struct pipe_video_compositor *vl_compositor_init(struct pipe_video_context *vpipe,
+ struct pipe_context *pipe);
#endif /* vl_compositor_h */