#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)
{
}
}
+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)
{
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;
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 {
typedef struct {
struct pipe_video_buffer templat, *buffer;
struct pipe_fence_handle *fence;
+ struct util_dynarray subpics; /* vlVaSubpicture */
} vlVaSurface;
// Public functions: