2009-10-31 12:54:56 -06:00
|
|
|
|
|
|
|
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 {
|
2012-03-10 09:59:02 -07:00
|
|
|
int flags;
|
2009-10-31 12:54:56 -06:00
|
|
|
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.
|
|
|
|
|
2012-03-10 09:59:02 -07:00
|
|
|
XvImage formats supported by the port may be queried with
|
2009-10-31 12:54:56 -06:00
|
|
|
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;
|
2012-03-10 09:59:02 -07:00
|
|
|
unsigned int red_mask;
|
|
|
|
unsigned int green_mask;
|
|
|
|
unsigned int blue_mask;
|
2009-10-31 12:54:56 -06:00
|
|
|
|
|
|
|
/* for YUV formats */
|
|
|
|
unsigned int y_sample_bits;
|
|
|
|
unsigned int u_sample_bits;
|
2012-03-10 09:59:02 -07:00
|
|
|
unsigned int v_sample_bits;
|
2009-10-31 12:54:56 -06:00
|
|
|
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 */
|
2012-03-10 09:59:02 -07:00
|
|
|
} XvImageFormatValues;
|
2009-10-31 12:54:56 -06:00
|
|
|
|
|
|
|
|
|
|
|
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.
|
2012-03-10 09:59:02 -07:00
|
|
|
|
2009-10-31 12:54:56 -06:00
|
|
|
guid - The Globally Unique IDentifier (also known as Universally Unique
|
2012-03-10 09:59:02 -07:00
|
|
|
IDentifier). When not applicable, all characters are NULL.
|
2009-10-31 12:54:56 -06:00
|
|
|
|
|
|
|
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
|
2012-03-10 09:59:02 -07:00
|
|
|
occur in the horizontal and vertical
|
2009-10-31 12:54:56 -06:00
|
|
|
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
|
2012-03-10 09:59:02 -07:00
|
|
|
available, should provide the most accurate description of the
|
2009-10-31 12:54:56 -06:00
|
|
|
format.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
XvImageFormatValues * XvListImageFormats (
|
|
|
|
Display *display,
|
|
|
|
XvPortID port_id,
|
|
|
|
int *count_return
|
|
|
|
);
|
|
|
|
|
2012-03-10 09:59:02 -07:00
|
|
|
Returns the XvImageFormatValues supported by the specified port.
|
2009-10-31 12:54:56 -06:00
|
|
|
This list should be freed with XFree().
|
2012-03-10 09:59:02 -07:00
|
|
|
|
2009-10-31 12:54:56 -06:00
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
int id;
|
|
|
|
int width, height;
|
|
|
|
int data_size;
|
|
|
|
int num_planes;
|
|
|
|
int *pitches;
|
|
|
|
int *offsets;
|
2012-03-10 09:59:02 -07:00
|
|
|
char *data;
|
|
|
|
XPointer obdata;
|
2009-10-31 12:54:56 -06:00
|
|
|
} XvImage;
|
|
|
|
|
|
|
|
id - XvImageFormatValues id.
|
2012-03-10 09:59:02 -07:00
|
|
|
|
2009-10-31 12:54:56 -06:00
|
|
|
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
|
2012-03-10 09:59:02 -07:00
|
|
|
set up by the client libraries so the programmer will
|
2009-10-31 12:54:56 -06:00
|
|
|
generally need not be concerned with this field.
|
|
|
|
|
|
|
|
XvImage * XvCreateImage (
|
|
|
|
Display *display,
|
|
|
|
XvPortID port,
|
|
|
|
int id,
|
|
|
|
char *data,
|
2012-03-10 09:59:02 -07:00
|
|
|
int width,
|
|
|
|
int height
|
2009-10-31 12:54:56 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
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
|
2012-03-10 09:59:02 -07:00
|
|
|
give in the "data_size" field in the XvImage. Image data is
|
2009-10-31 12:54:56 -06:00
|
|
|
not allocated by this function. The client may pass a pointer
|
|
|
|
to the preallocated memory as "data" or may allocate the memory
|
2012-03-10 09:59:02 -07:00
|
|
|
and fill in the XvImage structure's data field after the
|
2009-10-31 12:54:56 -06:00
|
|
|
"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,
|
2012-03-10 09:59:02 -07:00
|
|
|
int width,
|
2009-10-31 12:54:56 -06:00
|
|
|
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
|
2012-03-10 09:59:02 -07:00
|
|
|
give in the "data_size" field in the XvImage. Image data is
|
2009-10-31 12:54:56 -06:00
|
|
|
not allocated by this function. The client may pass a pointer
|
|
|
|
to the preallocated memory as "data" or may allocate the memory
|
2012-03-10 09:59:02 -07:00
|
|
|
and fill in the XvImage structure's data field after the
|
2009-10-31 12:54:56 -06:00
|
|
|
"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,
|
2012-03-10 09:59:02 -07:00
|
|
|
int dest_x,
|
2009-10-31 12:54:56 -06:00
|
|
|
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,
|
2012-03-10 09:59:02 -07:00
|
|
|
int dest_x,
|
2009-10-31 12:54:56 -06:00
|
|
|
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.
|
2012-03-10 09:59:02 -07:00
|
|
|
|
2009-10-31 12:54:56 -06:00
|
|
|
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.
|
2012-03-10 09:59:02 -07:00
|
|
|
|
2009-10-31 12:54:56 -06:00
|
|
|
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.
|
2012-03-10 09:59:02 -07:00
|
|
|
BadAlloc - The server was unable to allocate resources required
|
2009-10-31 12:54:56 -06:00
|
|
|
to complete the operation.
|
2012-03-10 09:59:02 -07:00
|
|
|
BadValue - Some numeric value falls outside the range of the
|
2009-10-31 12:54:56 -06:00
|
|
|
values accepted by the request.
|
|
|
|
BadShmSegCode - An invalid shared memory segment.
|