gallium: new, unified pipe_context::set_sampler_views() function
[mesa.git] / src / gallium / auxiliary / vl / vl_video_buffer.h
index 2dca74f641e4e2494f4216a8699c8726d77ffa74..b936a378e1e0bf8763248f0505cffbfafd61a1ae 100644 (file)
  *
  **************************************************************************/
 
-#ifndef vl_ycbcr_buffer_h
-#define vl_ycbcr_buffer_h
+#ifndef vl_video_buffer_h
+#define vl_video_buffer_h
 
-#include <pipe/p_context.h>
-#include <pipe/p_video_context.h>
+#include "pipe/p_context.h"
+#include "pipe/p_video_codec.h"
 
 #include "vl_defines.h"
 
 struct vl_video_buffer
 {
    struct pipe_video_buffer base;
-   struct pipe_context      *pipe;
    unsigned                 num_planes;
-   struct pipe_resource     *resources[VL_MAX_PLANES];
-   struct pipe_sampler_view *sampler_view_planes[VL_MAX_PLANES];
-   struct pipe_sampler_view *sampler_view_components[VL_MAX_PLANES];
-   struct pipe_surface      *surfaces[VL_MAX_PLANES];
+   struct pipe_resource     *resources[VL_NUM_COMPONENTS];
+   struct pipe_sampler_view *sampler_view_planes[VL_NUM_COMPONENTS];
+   struct pipe_sampler_view *sampler_view_components[VL_NUM_COMPONENTS];
+   struct pipe_surface      *surfaces[VL_MAX_SURFACES];
 };
 
 /**
- * initialize a buffer, creating its resources
+ * get subformats for each plane
+ */
+const enum pipe_format *
+vl_video_buffer_formats(struct pipe_screen *screen, enum pipe_format format);
+
+/**
+ * get YUV plane order
+ */
+const unsigned *
+vl_video_buffer_plane_order(enum pipe_format format);
+
+/**
+ * get maximum size of video buffers
+ */
+unsigned
+vl_video_buffer_max_size(struct pipe_screen *screen);
+
+/**
+ * check if video buffer format is supported for a codec/profile
+ * can be used as default implementation of screen->is_video_format_supported
+ */
+boolean
+vl_video_buffer_is_format_supported(struct pipe_screen *screen,
+                                    enum pipe_format format,
+                                    enum pipe_video_profile profile,
+                                    enum pipe_video_entrypoint entrypoint);
+
+/*
+ * set the associated data for the given video buffer
+ */
+void
+vl_video_buffer_set_associated_data(struct pipe_video_buffer *vbuf,
+                                    struct pipe_video_codec *vcodec,
+                                    void *associated_data,
+                                    void (*destroy_associated_data)(void *));
+
+/*
+ * get the associated data for the given video buffer
+ */
+void *
+vl_video_buffer_get_associated_data(struct pipe_video_buffer *vbuf,
+                                    struct pipe_video_codec *vcodec);
+
+/**
+ * fill a resource template for the given plane
+ */
+void
+vl_video_buffer_template(struct pipe_resource *templ,
+                         const struct pipe_video_buffer *templat,
+                         enum pipe_format resource_format,
+                         unsigned depth, unsigned array_size,
+                         unsigned usage, unsigned plane);
+
+/**
+ * creates a video buffer, can be used as a standard implementation for pipe->create_video_buffer
+ */
+struct pipe_video_buffer *
+vl_video_buffer_create(struct pipe_context *pipe,
+                       const struct pipe_video_buffer *templat);
+
+/**
+ * extended create function, gets depth, array_size, usage and formats for each plane seperately
  */
 struct pipe_video_buffer *
-vl_video_buffer_init(struct pipe_video_context *context,
-                     struct pipe_context *pipe,
-                     unsigned width, unsigned height, unsigned depth,
-                     enum pipe_video_chroma_format chroma_format,
-                     const enum pipe_format resource_formats[VL_MAX_PLANES],
-                     unsigned usage);
-#endif /* vl_ycbcr_buffer_h */
+vl_video_buffer_create_ex(struct pipe_context *pipe,
+                          const struct pipe_video_buffer *templat,
+                          const enum pipe_format resource_formats[VL_NUM_COMPONENTS],
+                          unsigned depth, unsigned array_size, unsigned usage);
+
+/**
+ * even more extended create function, provide the pipe_resource for each plane
+ */
+struct pipe_video_buffer *
+vl_video_buffer_create_ex2(struct pipe_context *pipe,
+                           const struct pipe_video_buffer *templat,
+                           struct pipe_resource *resources[VL_NUM_COMPONENTS]);
+
+#endif /* vl_video_buffer_h */