radeon/uvd: recalculate dbp buffer size
[mesa.git] / src / gallium / state_trackers / va / va_private.h
index 34e1f3ed661c2b4386d5e595ac5c5eeb9d078302..1ea7be79aa3fb9cc9815bc329ebbb84f1b11b1c0 100644 (file)
 #include "vl/vl_compositor.h"
 #include "vl/vl_csc.h"
 
+#include "util/u_dynarray.h"
+
 #define VL_VA_DRIVER(ctx) ((vlVaDriver *)ctx->pDriverData)
 #define VL_VA_PSCREEN(ctx) (VL_VA_DRIVER(ctx)->vscreen->pscreen)
 
+#define VL_VA_MAX_IMAGE_FORMATS 6
+
 static inline enum pipe_video_chroma_format
 ChromaToPipe(int format)
 {
@@ -60,6 +64,28 @@ ChromaToPipe(int format)
    }
 }
 
+static inline enum pipe_format
+YCbCrToPipe(unsigned format)
+{
+   switch(format) {
+   case VA_FOURCC('N','V','1','2'):
+      return PIPE_FORMAT_NV12;
+   case VA_FOURCC('I','4','2','0'):
+      return PIPE_FORMAT_IYUV;
+   case VA_FOURCC('Y','V','1','2'):
+      return PIPE_FORMAT_YV12;
+   case VA_FOURCC('Y','U','Y','V'):
+      return PIPE_FORMAT_YUYV;
+   case VA_FOURCC('U','Y','V','Y'):
+      return PIPE_FORMAT_UYVY;
+   case VA_FOURCC('B','G','R','A'):
+      return PIPE_FORMAT_B8G8R8A8_UNORM;
+   default:
+      assert(0);
+      return PIPE_FORMAT_NONE;
+   }
+}
+
 static inline VAProfile
 PipeToProfile(enum pipe_video_profile profile)
 {
@@ -130,6 +156,15 @@ typedef struct {
    vl_csc_matrix csc;
 } vlVaDriver;
 
+typedef struct {
+   VAImage *image;
+
+   struct u_rect src_rect;
+   struct u_rect dst_rect;
+
+   struct pipe_sampler_view *sampler;
+} vlVaSubpicture;
+
 typedef struct {
    struct pipe_video_codec *decoder;
    struct pipe_video_buffer *target;
@@ -140,6 +175,15 @@ typedef struct {
       struct pipe_vc1_picture_desc vc1;
       struct pipe_h264_picture_desc h264;
    } desc;
+
+   struct {
+      unsigned long long int frame_num;
+      unsigned int start_code_size;
+      unsigned int vti_bits;
+      unsigned int quant_scale;
+      VAPictureParameterBufferMPEG4 pps;
+      uint8_t start_code[32];
+   } mpeg4;
 } vlVaContext;
 
 typedef struct {
@@ -152,6 +196,7 @@ typedef struct {
 typedef struct {
    struct pipe_video_buffer templat, *buffer;
    struct pipe_fence_handle *fence;
+   struct util_dynarray subpics; /* vlVaSubpicture */
 } vlVaSurface;
 
 // Public functions: