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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
|
Addendum to the Xv Client library documentation
===============================================
The following features are new to version 2.2
1) In addition to XvInputMask and XvOutputMask masks in the type field
of the XvAdaptorInfo there are 3 new bits defined - XvVideoMask,
XvStillMask and XvImageMask indicating that the adaptor is capable
of video, still or image primitives respectively.
2) A new function and structure is defined to allow querying
port attributes.
typedef struct {
int flags;
int min_value;
int max_value;
char *name;
} XvAttribute;
flags - May be XvGettable or XvSettable or both OR'd together
indicating the particular attribute is readable, writeable
or readable and writeable.
min_value, max_value - Indicate the minimun and maximum attribute
values which are valid for the driver.
name - A string describing the name of the attribute that may be used
to retrieve the Atom for the particular attribute.
extern XvAttribute* XvQueryPortAttributes(
Display* /* display */,
XvPortID /* port */,
int* /* number */
);
XvQueryPortAttributes returns the number of attributes and an
array of XvAttributes valid for the given port. The array may
be freed with XFree().
3) The X Video Extension (Xv) is extended to support client images in
alternate colorspaces (XvImages) in the following way.
Xv Adaptors which are capable of displaying XvImages will have
the XvImageMask field set in the type field of the XvAdaptorInfo.
XvImage formats supported by the port may be queried with
XvListImageFormats().
XvImages may be created with the help of XvCreateImage() or
XvShmCreateImage();
XvImages may be displayed with XvPutImage() or XvShmPutImage().
The Port attributes of the port specified in the Xv(Shm)PutImage
command will be valid for the image operation when applicable.
There will be a port encoding with the name "XV_IMAGE". The
width and height of that encoding will indicate the maximum
source image size.
typedef struct {
int id; /* Unique descriptor for the format */
int type; /* XvRGB, XvYUV */
int byte_order; /* LSBFirst, MSBFirst */
char guid[16]; /* Globally Unique IDentifier */
int bits_per_pixel;
int format; /* XvPacked, XvPlanar */
int num_planes;
/* for RGB formats */
int depth;
unsigned int red_mask;
unsigned int green_mask;
unsigned int blue_mask;
/* for YUV formats */
unsigned int y_sample_bits;
unsigned int u_sample_bits;
unsigned int v_sample_bits;
unsigned int horz_y_period;
unsigned int horz_u_period;
unsigned int horz_v_period;
unsigned int vert_y_period;
unsigned int vert_u_period;
unsigned int vert_v_period;
char component_order[32]; /* eg. UYVY */
int scanline_order; /* XvTopToBottom, XvBottomToTop */
} XvImageFormatValues;
id - A unique descriptor for the format. This is often the FOURCC
for the format, when applicable. This id is used to describe
the format during XvImage creation.
type - XvRGB or XvYUV.
byte_order - The byte order of the image. It is either LSBFirst
or MSBFirst.
guid - The Globally Unique IDentifier (also known as Universally Unique
IDentifier). When not applicable, all characters are NULL.
bits_per_pixel - The bits taken up (but not necessarily used) by each
pixel. Note that for some planar formats which have
fractional bits per pixel (such as IF09) this number
may be rounded _down_.
format - XvPacked or XvPlanar.
num_planes - The number of planes in planar formats.
depth - Significant bits per pixel.
red_mask, green_mask, blue_mask - The red, green and blue bitmasks
(RGB formats only).
?_sample_bits - The size of each sample in bits (YUV formats only).
horz_?_period, vert_?_period - The period (in pixels) on which samples
occur in the horizontal and vertical
directions (YUV formats only).
component_order - Upper case ascii characters representing the order
that samples are stored within packed formats.
For planar formats this represents the ordering of
the planes.
scanline_order - XvTopToBottom or XvBottomToTop.
Note: Since some formats (particularly some planar YUV formats) may not
be completely defined by the parameters above, the guid, when
available, should provide the most accurate description of the
format.
XvImageFormatValues * XvListImageFormats (
Display *display,
XvPortID port_id,
int *count_return
);
Returns the XvImageFormatValues supported by the specified port.
This list should be freed with XFree().
typedef struct {
int id;
int width, height;
int data_size;
int num_planes;
int *pitches;
int *offsets;
char *data;
XPointer obdata;
} XvImage;
id - XvImageFormatValues id.
width, height - The width and height of the image in pixels.
int data_size - The size of the data buffer in bytes.
num_planes - The number of image planes.
pitches - An array of size num_planes indicating the scanline pitch
in bytes. Each plane may have a different pitch.
offsets - An array of size num_planes indicating the byte offset
from "data" to the start of each plane.
data - A pointer to the start of the data buffer.
obdata - A private field for holding SHM info. This field will be
set up by the client libraries so the programmer will
generally need not be concerned with this field.
XvImage * XvCreateImage (
Display *display,
XvPortID port,
int id,
char *data,
int width,
int height
);
display - Specifies the connection to the Xserver.
port - Specifies the port the XvImage will be used with.
id - Specifies the format of the image to be created by
the XvImageFormatValues id.
data - Specifies the image data.
width
height - Specifies the desired width and height of the image.
This function is similar to XCreateImage. The library will
allocate the XvImage structure and fill out all fields except for
"data". Width and height may be enlarged in some YUV formats.
The size of the data buffer that needs to be allocated will be
give in the "data_size" field in the XvImage. Image data is
not allocated by this function. The client may pass a pointer
to the preallocated memory as "data" or may allocate the memory
and fill in the XvImage structure's data field after the
"data_size" field has been filled out by the server. The XvImage
structure may be freed by XFree();
XvImage * XvShmCreateImage (
Display *display,
XvPortID port,
int id,
char* data,
int width,
int height,
XShmSegmentInfo *shminfo
);
This function is similar to XShmCreateImage. The library will
allocate the XvImage structure and fill out all fields except for
"data". Width and height may be enlarged in some YUV formats.
The size of the data buffer that needs to be allocated will be
give in the "data_size" field in the XvImage. Image data is
not allocated by this function. The client may pass a pointer
to the preallocated memory as "data" or may allocate the memory
and fill in the XvImage structure's data field after the
"data_size" field has been filled out by the server. The XvImage
structure may be freed by XFree();
XvPutImage (
Display *display,
XvPortID id,
Drawable d,
GC gc,
XvImage *image,
int src_x,
int src_y,
unsigned int src_w,
unsigned int src_h,
int dest_x,
int dest_y,
unsigned int dest_w,
unsigned int dest_h,
);
XvShmPutImage (
Display *display,
XvPortID id,
Drawable d,
GC gc,
XvImage *image,
int src_x,
int src_y,
unsigned int src_w,
unsigned int src_h,
int dest_x,
int dest_y,
unsigned int dest_w,
unsigned int dest_h,
Bool send_event
);
display - The connection to the X-Server.
id - The port id of a port on an XvImage capable adaptor.
d - The target drawable.
gc - the graphics context specifying the clip mask to use, if any.
image - A pointer to the XvImage to be displayed.
src_? - The portion of the XvImage to be displayed.
dest_? - The portion of the destination drawable to be filled by the image.
send_event - Indicates whether or not an XShmCompletionEvent should be
sent. If sent, the event's major_code and minor_code
fields will indicate the Xv extension's major code and
XvShmPutImage's minor code.
Shared memory segments are attached/detached with XShmAttach/Detach.
Some of the possible Errors:
BadDrawable - The specified drawable does not exist.
BadContext - The specified GC does not exist.
BadMatch - Incompatible arguments such as a port that isn't capable
of displaying XvImages.
XvBadPort - The specified port does not exist.
BadAlloc - The server was unable to allocate resources required
to complete the operation.
BadValue - Some numeric value falls outside the range of the
values accepted by the request.
BadShmSegCode - An invalid shared memory segment.
|