This source file includes following definitions.
- VMwareVideoGetAttributes
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 #ifndef _SVGA_OVERLAY_H_
34 #define _SVGA_OVERLAY_H_
35
36 #include "svga_reg.h"
37
38
39
40
41
42 #define VMWARE_FOURCC_YV12 0x32315659
43 #define VMWARE_FOURCC_YUY2 0x32595559
44 #define VMWARE_FOURCC_UYVY 0x59565955
45
46 typedef enum {
47 SVGA_OVERLAY_FORMAT_INVALID = 0,
48 SVGA_OVERLAY_FORMAT_YV12 = VMWARE_FOURCC_YV12,
49 SVGA_OVERLAY_FORMAT_YUY2 = VMWARE_FOURCC_YUY2,
50 SVGA_OVERLAY_FORMAT_UYVY = VMWARE_FOURCC_UYVY,
51 } SVGAOverlayFormat;
52
53 #define SVGA_VIDEO_COLORKEY_MASK 0x00ffffff
54
55 #define SVGA_ESCAPE_VMWARE_VIDEO 0x00020000
56
57 #define SVGA_ESCAPE_VMWARE_VIDEO_SET_REGS 0x00020001
58
59
60
61 #define SVGA_ESCAPE_VMWARE_VIDEO_FLUSH 0x00020002
62
63
64
65 typedef
66 struct SVGAEscapeVideoSetRegs {
67 struct {
68 uint32 cmdType;
69 uint32 streamId;
70 } header;
71
72
73 struct {
74 uint32 registerId;
75 uint32 value;
76 } items[1];
77 } SVGAEscapeVideoSetRegs;
78
79 typedef
80 struct SVGAEscapeVideoFlush {
81 uint32 cmdType;
82 uint32 streamId;
83 } SVGAEscapeVideoFlush;
84
85
86
87
88
89
90 typedef
91 struct {
92 uint32 command;
93 uint32 overlay;
94 } SVGAFifoEscapeCmdVideoBase;
95
96 typedef
97 struct {
98 SVGAFifoEscapeCmdVideoBase videoCmd;
99 } SVGAFifoEscapeCmdVideoFlush;
100
101 typedef
102 struct {
103 SVGAFifoEscapeCmdVideoBase videoCmd;
104 struct {
105 uint32 regId;
106 uint32 value;
107 } items[1];
108 } SVGAFifoEscapeCmdVideoSetRegs;
109
110 typedef
111 struct {
112 SVGAFifoEscapeCmdVideoBase videoCmd;
113 struct {
114 uint32 regId;
115 uint32 value;
116 } items[SVGA_VIDEO_NUM_REGS];
117 } SVGAFifoEscapeCmdVideoSetAllRegs;
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137 static inline bool
138 VMwareVideoGetAttributes(const SVGAOverlayFormat format,
139 uint32 *width,
140 uint32 *height,
141 uint32 *size,
142 uint32 *pitches,
143 uint32 *offsets)
144 {
145 int tmp;
146
147 *width = (*width + 1) & ~1;
148
149 if (offsets) {
150 offsets[0] = 0;
151 }
152
153 switch (format) {
154 case VMWARE_FOURCC_YV12:
155 *height = (*height + 1) & ~1;
156 *size = (*width) * (*height);
157
158 if (pitches) {
159 pitches[0] = *width;
160 }
161
162 if (offsets) {
163 offsets[1] = *size;
164 }
165
166 tmp = *width >> 1;
167
168 if (pitches) {
169 pitches[1] = pitches[2] = tmp;
170 }
171
172 tmp *= (*height >> 1);
173 *size += tmp;
174
175 if (offsets) {
176 offsets[2] = *size;
177 }
178
179 *size += tmp;
180 break;
181
182 case VMWARE_FOURCC_YUY2:
183 case VMWARE_FOURCC_UYVY:
184 *size = *width * 2;
185
186 if (pitches) {
187 pitches[0] = *size;
188 }
189
190 *size *= *height;
191 break;
192
193 default:
194 return false;
195 }
196
197 return true;
198 }
199
200 #endif