aboutsummaryrefslogtreecommitdiffstats
path: root/meta-emenlow/recipes-graphics/libva/libva-0.31.0/035_g45_add_yv12_image_format.patch
blob: 92d814c1a8cac1971790c30a3e39989ee7bb35ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
From 23b23e8d65551779f10aedddee7882c2e71ac162 Mon Sep 17 00:00:00 2001
From: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
Date: Wed, 4 Nov 2009 13:01:44 +0000
Subject: [PATCH] [G45] Add YV12 image format.

---
 i965_drv_video/i965_drv_video.c |   50 ++++++++++++++++++++++++++++++++++++++-
 i965_drv_video/i965_drv_video.h |    2 +-
 2 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c
index 1f026bc..8558d0e 100644
--- a/i965_drv_video/i965_drv_video.c
+++ b/i965_drv_video/i965_drv_video.c
@@ -54,6 +54,36 @@ enum {
     I965_SURFACETYPE_INDEXED
 };
 
+/* List of supported image formats */
+typedef struct {
+    unsigned int        type;
+    VAImageFormat       va_format;
+} i965_image_format_map_t;
+
+static const i965_image_format_map_t
+i965_image_formats_map[I965_MAX_IMAGE_FORMATS + 1] = {
+    { I965_SURFACETYPE_YUV,
+      { VA_FOURCC('Y','V','1','2'), VA_LSB_FIRST, 12, } },
+};
+
+static const i965_image_format_map_t *
+get_image_format(const VAImageFormat *va_format)
+{
+    unsigned int i;
+    for (i = 0; i965_image_formats_map[i].type != 0; i++) {
+        const i965_image_format_map_t * const m = &i965_image_formats_map[i];
+        if (m->va_format.fourcc == va_format->fourcc &&
+            (m->type == I965_SURFACETYPE_RGBA ?
+             (m->va_format.byte_order == va_format->byte_order &&
+              m->va_format.red_mask   == va_format->red_mask   &&
+              m->va_format.green_mask == va_format->green_mask &&
+              m->va_format.blue_mask  == va_format->blue_mask  &&
+              m->va_format.alpha_mask == va_format->alpha_mask) : 1))
+            return m;
+    }
+    return NULL;
+}
+
 /* List of supported subpicture formats */
 typedef struct {
     unsigned int        type;
@@ -398,8 +428,16 @@ i965_QueryImageFormats(VADriverContextP ctx,
                        VAImageFormat *format_list,      /* out */
                        int *num_formats)                /* out */
 {
+    int n;
+
+    for (n = 0; i965_image_formats_map[n].va_format.fourcc != 0; n++) {
+        const i965_image_format_map_t * const m = &i965_image_formats_map[n];
+        if (format_list)
+            format_list[n] = m->va_format;
+    }
+
     if (num_formats)
-        *num_formats = 0;
+        *num_formats = n;
 
     return VA_STATUS_SUCCESS;
 }
@@ -1236,6 +1274,16 @@ i965_CreateImage(VADriverContextP ctx,
         image->offsets[0] = 0;
         image->data_size  = image->offsets[0] + image->pitches[0] * height;
         break;
+    case VA_FOURCC('Y','V','1','2'):
+        image->num_planes = 3;
+        image->pitches[0] = width;
+        image->offsets[0] = 0;
+        image->pitches[1] = width2;
+        image->offsets[1] = size;
+        image->pitches[2] = width2;
+        image->offsets[2] = size + size2;
+        image->data_size  = size + 2 * size2;
+        break;
     default:
         goto error;
     }
diff --git a/i965_drv_video/i965_drv_video.h b/i965_drv_video/i965_drv_video.h
index 4d775da..f512793 100644
--- a/i965_drv_video/i965_drv_video.h
+++ b/i965_drv_video/i965_drv_video.h
@@ -41,7 +41,7 @@
 #define I965_MAX_PROFILES                       11
 #define I965_MAX_ENTRYPOINTS                    5
 #define I965_MAX_CONFIG_ATTRIBUTES              10
-#define I965_MAX_IMAGE_FORMATS                  10
+#define I965_MAX_IMAGE_FORMATS                  1
 #define I965_MAX_SUBPIC_FORMATS                 4
 #define I965_MAX_DISPLAY_ATTRIBUTES             4
 #define I965_STR_VENDOR                         "i965 Driver 0.1"
-- 
1.5.4.3