summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Coopersmith <alan.coopersmith@sun.com>2009-10-01 23:24:03 -0700
committerAlan Coopersmith <alan.coopersmith@sun.com>2009-10-01 23:24:03 -0700
commit11d244cdb677447947aebdca6ea44a74a3480cfe (patch)
treeb79cab3d00e665852c745c1754ef12df4bfb5ca1
parent6143ef460e0f5c1aca28effa2f4ec0c0a9ebe26a (diff)
Move specs/XvMC/XvMC_API.txt to libXvMC module
Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
-rw-r--r--Makefile.am1
-rw-r--r--specs/XvMC/XvMC_API.txt1293
2 files changed, 0 insertions, 1294 deletions
diff --git a/Makefile.am b/Makefile.am
index 4fffdd6..239df78 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -229,7 +229,6 @@ EXTRA_DIST = \
specs/xtrans/Xtrans.mm \
specs/Xt/strings.mit \
specs/Xt/Xtk.intr.front \
- specs/XvMC/XvMC_API.txt \
specs/Xv/xv-protocol-v2.txt \
util/block.awk \
util/fixindex.awk \
diff --git a/specs/XvMC/XvMC_API.txt b/specs/XvMC/XvMC_API.txt
deleted file mode 100644
index 9aded3a..0000000
--- a/specs/XvMC/XvMC_API.txt
+++ /dev/null
@@ -1,1293 +0,0 @@
-
- X-Video Motion Compensation - API specification v. 1.0
-
- Mark Vojkovich <markv@xfree86.org>
-
-
-/* history */
-
- first draft (9/6/00)
- second draft (10/31/00) - Changed to allow acceleration at both
- the motion compensation and IDCT level.
- third draft (1/21/01) - Some refinements and subpicture support.
- fourth draft (5/2/01) - Dual Prime clarification, add
- XvMCSetAttribute.
- fifth draft (6/26/01) - Change definition of XvMCCompositeSubpicture
- plus some clarifications and fixed typographical errors.
- sixth draft (9/24/01) - Added XVMC_SECOND_FIELD and removed
- XVMC_PROGRESSIVE_FRAME and XVMC_TOP_FIELD_FIRST flags.
- seventh draft (10/26/01) - Added XVMC_INTRA_UNSIGNED option.
- eighth draft (11/13/02) - Removed IQ level acceleration and
- changed some structures to remove unused fields.
-
-/* acknowledgements */
-
- Thanks to Matthew J. Sottek from Intel for lots of input.
-
-/********************************************************************/
-
- OVERVIEW
-
-/********************************************************************/
-
- XvMC extends the X-Video extension (Xv) and makes use of the
- familar concept of the XvPort. Ports have attributes that can be set
- and queried through Xv. In XvMC ports can also have hardware motion
- compensation contexts created for use with them. Ports which support
- XvImages (ie. they have an "XV_IMAGE" port encoding as described in
- the Xv version 2.2 API addendum) can be queried for the list of XvMCSurface
- types they support. If they support any XvMCSurface types an
- XvMCContext can be created for that port.
-
- An XvMCContext describes the state of the motion compensation
- pipeline. An individual XvMCContext can be created for use with
- a single port, surface type, motion compensation type, width and
- height combination. For example, a context might be created for a
- particular port that does MPEG-2 motion compensation on 720 x 480
- 4:2:0 surfaces. Once the context is created, referencing it implies
- the port, surface type, size and the motion compensation type. Contexts
- may be "direct" or "indirect". For indirect contexts the X server
- renders all video using the data passed to it by the client. For
- direct contexts the client libraries render the video with little
- or no interaction with the X server.
-
- XvMCSurfaces are buffers into which the motion compensation
- hardware can render. The data in the buffers themselves are not client
- accessible and may be stored in a hardware-specific format. Any
- number of buffers can be created for use with a particular context
- (resources permitting).
-
- XvMC provides video acceleration starting at one of two places
- in the video pipeline. Acceleration starting at the first point,
- which we shall call the "Motion Compensation" level, begins after the
- the inverse quantization and IDCT at the place where motion compensation
- is to be applied. The second point, which we shall call the "IDCT"
- level, begins before the IDCT just after the inverse quantization.
-
- Rendering is done by presenting the library with a target XvMCSurface
- and up to two reference XvMCSurfaces for the motion compensation, a
- buffer of 8x8 blocks and a command buffer which describes how to
- use the 8x8 blocks along with motion compensation vectors to construct
- the data in the target XvMCSurface. When the pipeline starts at the
- IDCT level, Xv will perform the IDCT on the blocks before performing
- the motion compensation. A function is provided to copy/overlay a
- portion of the XvMCSurface to a drawable with arbitrary scaling.
-
- XvMCSubpictures are separate surfaces that may be blended with the
- target surface. Any number of XvMCSubpictures may be created for use
- with a context (resources permitting). Both "backend" and "frontend"
- subpicture behavior are supported.
-
-/********************************************************************/
-
- QUERYING THE EXTENSION
-
-/********************************************************************/
-
-/* Errors */
-#define XvMCBadContext 0
-#define XvMCBadSurface 1
-#define XvMCBadSubpicture 2
-
-Bool XvMCQueryExtension (Display *display, int *eventBase, int *errBase)
-
- Returns True if the extension exists, False otherwise. Also returns
- the error and event bases.
-
- display - The connection to the server.
-
- eventBase -
- errBase - The returned event and error bases. Currently there
- are no events defined.
-
-Status XvMCQueryVersion (Display *display, int *major, int *minor)
-
- Query the major and minor version numbers of the extension.
-
- display - The connection to the server.
-
- major -
- minor - The returned major and minor version numbers.
-
-/********************************************************************/
-
- QUERYING SURFACE TYPES
-
-/********************************************************************/
-
-/* Chroma formats */
-#define XVMC_CHROMA_FORMAT_420 0x00000001
-#define XVMC_CHROMA_FORMAT_422 0x00000002
-#define XVMC_CHROMA_FORMAT_444 0x00000003
-
-/* XvMCSurfaceInfo Flags */
-#define XVMC_OVERLAID_SURFACE 0x00000001
-#define XVMC_BACKEND_SUBPICTURE 0x00000002
-#define XVMC_SUBPICTURE_INDEPENDENT_SCALING 0x00000004
-#define XVMC_INTRA_UNSIGNED 0x00000008
-
-/* Motion Compensation types */
-#define XVMC_MOCOMP 0x00000000
-#define XVMC_IDCT 0x00010000
-
-#define XVMC_MPEG_1 0x00000001
-#define XVMC_MPEG_2 0x00000002
-#define XVMC_H263 0x00000003
-#define XVMC_MPEG_4 0x00000004
-
-
-typedef struct {
- int surface_type_id;
- int chroma_format;
- unsigned short max_width;
- unsigned short max_height;
- unsigned short subpicture_max_width;
- unsigned short subpicture_max_height;
- int mc_type;
- int flags;
-} XvMCSurfaceInfo;
-
- surface_type_id - Unique descriptor for this surface type.
-
- chroma_format - Chroma format of this surface (eg. XVMC_CHROMA_FORMAT_420,
- XVMC_CHROMA_FORMAT_422, XVMC_CHROMA_FORMAT_444).
-
- max_width -
- max_height - Maximum dimensions of the luma data in pixels.
-
- subpicture_max_width -
- subpicture_max_height - The Maximum dimensions of the subpicture
- that can be created for use with this surface
- Both fields are zero if subpictures are not
- supported.
-
- mc_type - The type of motion compensation available for this
- surface. This consists of XVMC_MPEG_1, XVMC_MPEG_2, XVMC_H263
- or XVMC_MPEG_4 OR'd together with any of the following:
-
- XVMC_MOCOMP - Acceleration starts at the motion compensation
- level;
-
- XVMC_IDCT - Acceleration starts at the IDCT level.
-
- flags - Any combination of the following may be OR'd together.
-
- XVMC_OVERLAID_SURFACE - Displayed data is overlaid and not
- physically in the visible framebuffer.
- When this is set the client is responsible
- for painting the colorkey.
-
- XVMC_BACKEND_SUBPICTURE - The supicture is of the "backend"
- variety. It is "frontend" otherwise.
- There is more information on this in the
- section on subpictures below.
-
- XVMC_SUBPICTURE_INDEPENDENT_SCALING - The subpicture can be scaled
- independently of the video
- surface. See the section on
- subpictures below.
-
- XVMC_INTRA_UNSIGNED - When this flag is set, the motion compenstation
- level Intra macroblock data should be in an
- unsigned format rather than the signed format
- present in the mpeg stream. This flag applies
- only to motion compensation level acceleration.
-
-XvMCSurfaceInfo * XvMCListSurfaceTypes(Display *dpy, XvPortID port, int *num)
-
- Returns the number of surface types supported by the XvPort and an array
- of XvMCSurfaceInfo describing each surface type. The returned array
- should be freed with XFree().
-
- dpy - The connection to the server.
-
- port - The port we want to get the XvMCSurfaceInfo array for.
-
- num - The number of elements returned in the array.
-
- Errors:
-
- XvBadPort - The requested port does not exist.
-
- BadAlloc - There are insufficient resources to complete this request.
-
-
-/********************************************************************/
-
- CREATING A CONTEXT
-
-/********************************************************************/
-
-/* XvMCContext flags */
-#define XVMC_DIRECT 0x00000001
-
-typedef struct {
- XID context_id;
- int surface_type_id;
- unsigned short width;
- unsigned short height;
- XVPortID port;
- int flags;
- void * privData; /* private to the library */
-} XvMCContext;
-
- context_id - An XID associated with the context.
-
- surface_type_id - This refers to the XvMCSurfaceInfo that describes
- the surface characteristics.
-
- width -
- height - The dimensions (of the luma data) this context supports.
-
- port - The port that this context supports.
-
- flags - Any combination may be OR'd together.
-
- XVMC_DIRECT - This context is direct rendered.
-
-
-Status XvMCCreateContext (
- Display display,
- XVPortID port,
- int surface_type_id,
- int width,
- int height,
- int flags,
- XvMCContext * context
-);
-
- This creates a context by filling out the XvMCContext structure passed
- to it and returning Success.
-
- display - Specifies the connection to the server.
-
- port - Specifies the port to create the context for.
-
- surface_type_id -
- width -
- height - Specifies the surface type and dimensions that this
- context will be used for. The surface_type_id corresponds
- to the surface_type_id referenced by the XvMCSurfaceInfo.
- The surface returned may be larger than the surface requested
- (usually the next larger multiple of 16x16 pixels).
-
- flags - Any of the following may by OR'd together:
-
- XVMC_DIRECT - A direct context is requested.
- If a direct context cannot be created the request
- will not fail, rather, an indirect context will
- be created instead.
-
- context - Pointer to the pre-allocated XvMCContext structure.
-
-
-
- Errors:
-
- XvBadPort - The requested port does not exist.
-
- BadValue - The dimensions requested are not supported by the
- surface type.
-
- BadMatch - The surface_type_id is not supported by the port.
-
- BadAlloc - There are not sufficient resources to fulfill this
- request.
-
-
-Status XvMCDestroyContext (Display display, XvMCContext * context)
-
- Destroys the specified context.
-
- display - Specifies the connection to the server.
-
- context - The context to be destroyed.
-
- Errors:
-
- XvMCBadContext - The XvMCContext is not valid.
-
-
-/*********************************************************************/
-
- SURFACE CREATION
-
-/*********************************************************************/
-
-typedef struct {
- XID surface_id;
- XID context_id;
- int surface_type_id;
- unsigned short width;
- unsigned short height;
- void *privData; /* private to the library */
-} XvMCSurface;
-
- surface_id - An XID associated with the surface.
-
- context_id - The XID of the context for which the surface was created.
-
- surface_type_id - Derived from the context_id, it specifies the
- XvMCSurfaceInfo describing the surface.
-
- width -
- height - The width and height of the luma data.
-
-
-Status
-XvMCCreateSurface(
- Display *display,
- XvMCContext * context;
- XvMCSurface * surface;
-);
-
- Creates a surface (Frame) for use with the specified context.
- The surface structure is filled out and Success is returned if no
- error occured.
-
- context - pointer to a valid context. The context implies
- the surface type to be created, and its dimensions.
-
- surface - pointer to a pre-allocated XvMCSurface structure.
-
- Errors:
-
- XvMCBadContext - the context is not valid.
-
- BadAlloc - there are insufficient resources to complete
- this operation.
-
-Status XvMCDestroySurface(Display *display, XvMCSurface *surface);
-
- Destroys the given surface.
-
- display - Specifies the connection to the server.
-
- surface - The surface to be destroyed.
-
- Errors:
-
- XvMCBadSurface - The XvMCSurface is not valid.
-
-
-
-/*********************************************************************/
-
- RENDERING A FRAME
-
-/*********************************************************************/
-
-typedef struct {
- XID context_id;
- unsigned int num_blocks;
- short *blocks;
- void *privData; /* private to the library */
-} XvMCBlockArray;
-
- num_blocks - Number of 64 element blocks in the blocks array.
-
- context_id - XID of the context these blocks were allocated for.
-
- blocks - Pointer to an array of (64 * num_blocks) shorts.
-
-Status XvMCCreateBlocks (
- Display *display,
- XvMCContext *context,
- unsigned int num_blocks,
- XvMCBlockArray * block
-);
-
- This allocates an array of DCT blocks in the XvMCBlockArray
- structure passed to it. Success is returned if no error occured.
-
- display - The connection to the server.
-
- context - The context the block array is being created for.
-
- num_blocks - The number of 64 element short blocks to be allocated.
- This number must be non-zero.
-
- block - A pointer to a pre-allocated XvMCBlockArray structure.
-
- Errors:
-
- XvMCBadContext - the context is invalid.
-
- BadAlloc - There are insufficient resources to complete the
- operation.
-
- BadValue - num_blocks was zero.
-
-Status XvMCDestroyBlocks (Display *display, XvMCBlockArray * block)
-
- Frees the given array.
-
- display - The connection to the server.
-
- block - The block array to be freed.
-
-
- ----------------------------------------------------------
-
-#define XVMC_MB_TYPE_MOTION_FORWARD 0x02
-#define XVMC_MB_TYPE_MOTION_BACKWARD 0x04
-#define XVMC_MB_TYPE_PATTERN 0x08
-#define XVMC_MB_TYPE_INTRA 0x10
-
-#define XVMC_PREDICTION_FIELD 0x01
-#define XVMC_PREDICTION_FRAME 0x02
-#define XVMC_PREDICTION_DUAL_PRIME 0x03
-#define XVMC_PREDICTION_16x8 0x02
-#define XVMC_PREDICTION_4MV 0x04
-
-#define XVMC_SELECT_FIRST_FORWARD 0x01
-#define XVMC_SELECT_FIRST_BACKWARD 0x02
-#define XVMC_SELECT_SECOND_FORWARD 0x04
-#define XVMC_SELECT_SECOND_BACKWARD 0x08
-
-#define XVMC_DCT_TYPE_FRAME 0x00
-#define XVMC_DCT_TYPE_FIELD 0x01
-
-typedef struct {
- unsigned short x;
- unsigned short y;
- unsigned char macroblock_type;
- unsigned char motion_type;
- unsigned char motion_vertical_field_select;
- unsigned char dct_type;
- short PMV[2][2][2];
- unsigned int index;
- unsigned short coded_block_pattern;
- unsigned short pad0;
-} XvMCMacroBlock;
-
- x, y - location of the macroblock on the surface in units of macroblocks.
-
- macroblock_type - can be any of the following flags OR'd together:
-
- XVMC_MB_TYPE_MOTION_FORWARD - Forward motion prediction should
- be done. This flag is ignored for
- Intra frames.
-
- XVMC_MB_TYPE_MOTION_BACKWARD - Backward motion prediction should
- be done. This flag is ignored when
- the frame is not bidirectionally
- predicted.
-
- XVMC_MB_TYPE_PATTERN - Blocks are referenced and they contain
- differentials. The coded_block_pattern will
- indicate the number of blocks and index will
- note their locations in the block array.
-
- XVMC_MB_TYPE_INTRA - Blocks are referenced and they are intra blocks.
- The coded_block_pattern will indicate the number
- of blocks and index will note their locations in
- the block array. XVMC_MB_TYPE_PATTERN and
- XVMC_MB_TYPE_INTRA are mutually exclusive. If
- both are specified, XVMC_MB_TYPE_INTRA takes
- precedence.
-
- motion_type - If the surface is a field, the following are valid:
- XVMC_PREDICTION_FIELD
- XVMC_PREDICTION_16x8
- XVMC_PREDICTION_DUAL_PRIME
- If the surface is a frame, the following are valid:
- XVMC_PREDICTION_FIELD
- XVMC_PREDICTION_FRAME
- XVMC_PREDICTION_DUAL_PRIME
-
- motion_vertical_field_select - The following flags may be OR'd together
-
- XVMC_SELECT_FIRST_FORWARD
- XVMC_SELECT_FIRST_BACKWARD
- XVMC_SELECT_SECOND_FORWARD
- XVMC_SELECT_SECOND_BACKWARD
-
- If the bit is set the bottom field is indicated.
- If the bit is clear the top field is indicated.
-
- X X X X D C B A
- ------- | | | |_ First vector forward
- | | | |___ First vector backward
- unused | |_____ Second vector forward
- |_______ Second vector backward
-
- PMV - The motion vector(s)
-
- PMV[c][b][a]
-
- a - This holds the vector. 0 = horizontal, 1 = vertical.
- b - 0 = forward, 1 = backward.
- c - 0 = first vector, 1 = second vector.
-
- The motion vectors are used only when XVMC_MB_TYPE_MOTION_FORWARD
- or XVMC_MB_TYPE_MOTION_BACKWARD are set.
-
- DualPrime vectors must be fully decoded and placed in the PMV
- array as follows.
-
- Field structure:
-
- PMV[0][0][1:0] from same parity
- PMV[0][1][1:0] from opposite parity
-
- Frame structure:
-
- PMV[0][0][1:0] top from top
- PMV[0][1][1:0] bottom from bottom
- PMV[1][0][1:0] top from bottom
- PMV[1][1][1:0] bottom from top
-
-
- index - The offset in units of (64 * sizeof(short)) from the start of
- the block array where this macroblock's DCT blocks, as indicated
- by the coded_block_pattern, are stored.
-
- coded_block_pattern - Indicates the blocks to be updated. The bitplanes
- are specific to the mc_type of the surface. This
- field is valid only if XVMC_MB_TYPE_PATTERN or
- XVMC_MB_TYPE_INTRA are set. In that case the blocks
- are differential or intra blocks respectively.
- The bitplanes are described in ISO/IEC 13818-2
- Figures 6.10-12.
-
- dct_type - This field indicates whether frame pictures are frame DCT
- coded or field DCT coded. ie XVMC_DCT_TYPE_FIELD or
- XVMC_DCT_TYPE_FRAME.
-
-
-typedef struct {
- unsigned int num_blocks;
- XID context_id;
- XvMCMacroBlock *macro_blocks;
- void *privData; /* private to the library */
-} XvMCMacroBlockArray;
-
-
- num_blocks - Number of XvMCMacroBlocks in the macro_blocks array.
-
- context_id - XID of the context these macroblocks were allocated for.
-
- macro_blocks - Pointer to an array of num_blocks XvMCMacroBlocks.
-
-
-Status XvMCCreateMacroBlocks (
- Display *display,
- XvMCContext *context,
- unsigned int num_blocks,
- XvMCMacroBlockArray * blocks
-);
-
- This allocates an array of XvMCMacroBlocks in the XvMCMacroBlockArray
- structure passed to it. Success is returned if no error occured.
-
- display - The connection to the server.
-
- context - The context the macroblock array is being created for.
-
- num_blocks - The number of XvMCMacroBlocks to be allocated.
- This number must be non-zero.
-
- blocks - A pointer to a pre-allocated XvMCMacroBlockArray structure.
-
- Errors:
-
- XvMCBadContext - the context is invalid.
-
- BadAlloc - There are insufficient resources to complete the
- operation.
-
- BadValue - num_blocks was zero.
-
-Status XvMCDestroyMacroBlocks (Display *display, XvMCMacroBlockArray * block)
-
- Frees the given array.
-
- display - The connection to the server.
-
- block - The macro block array to be freed.
-
-
- ------------------------------------------------------------
-
-#define XVMC_TOP_FIELD 0x00000001
-#define XVMC_BOTTOM_FIELD 0x00000002
-#define XVMC_FRAME_PICTURE (XVMC_TOP_FIELD | XVMC_BOTTOM_FIELD)
-
-#define XVMC_SECOND_FIELD 0x00000004
-
-Status XvMCRenderSurface(
- Display *display,
- XvMCContext *context,
- unsigned int picture_structure,
- Surface *target_surface,
- Surface *past_surface,
- Surface *future_surface,
- unsigned int flags,
- unsigned int num_macroblocks,
- unsigned int first_macroblock,
- XvMCMacroBlockArray *macroblock_array,
- XvMCBlockArray *blocks
-);
-
- This function renders the macroblocks passed to it. It will not
- return until it has read all of the macroblocks, however, rendering
- will usually not be completed by that time. The return of this
- function means it is safe to touch the blocks and macroblock_array.
- To synchronize rendering see the section on sychronization below.
-
- display - The connection to the server.
-
- context - The context used to render.
-
- target_surface -
- past_surface -
- furture_surface -
-
- The target_surface is required. If the future and past
- surfaces are NULL, the target_surface is an "Intra" frame.
-
- If the past surface is provided but not the future surface,
- the target_surface is a "Predicted Inter" frame.
-
- If both past and future surfaces are provided, the
- target_surface is a "Bidirectionally-predicted Inter" frame.
-
- Specifying a future surface without a past surface results
- in a BadMatch.
-
- All surfaces must belong to the same context.
-
- picture_structure - XVMC_TOP_FIELD, XVMC_BOTTOM_FIELD or
- XVMC_FRAME_PICTURE.
-
-
- flags - Flags may include:
-
- XVMC_SECOND_FIELD - For field pictures this indicates whether
- the current field (top or bottom) is first
- or second in the sequence.
-
- num_macroblocks - The number of XvMCMacroBlock structures to execute in
- the macroblock_array.
-
- first_macroblock - The index of the first XvMCMacroBlock to process in the
- macroblock_array.
-
- blocks - The array of XvMCBlocks to be referenced by the XvMCMacroBlocks.
- The data in the individual blocks are in raster scan order and
- should be clamped to the limits specific to the acceleration
- level. For motion compensation level acceleration this is 8
- bits for Intra and 9 bits for non-Intra data. At the IDCT level
- this is 12 bits.
-
- Errors:
-
- XvMCBadContext - The context is not valid.
-
- XvMCBadSurface - Any of the surfaces are not valid.
-
- BadMatch - Any of the surfaces do not belong to the specified
- context or a future surface was specified without
- a past surface.
-
- BadValue - Unrecognized data for the picture_structure.
-
-
-/***********************************************************************/
-
- DISPLAYING THE SURFACE
-
-/***********************************************************************/
-
-
-Status
-XvMCPutSurface(
- Display *display,
- XvMCSurface *surface,
- Drawable draw,
- short srcx,
- short srcy,
- unsigned short srcw,
- unsigned short srch,
- short destx,
- short desty,
- unsigned short destw,
- unsigned short desth,
- int flags
-);
-
- Display the rectangle from the source defined by srcx/y/w/h scaled
- to destw by desth and placed at (destx, desty) on the given drawable.
- This function is not guaranteed to be pipelined with previous rendering
- commands and may display the surface immediately. Therefore, the client
- must query that the surface has finished rendering before calling this
- function.
-
- display - The connection to the server.
-
- surface - The surface to copy/overlay from.
-
- draw - The drawable to copy/overlay the video on.
-
- srcx -
- srcy -
- srcw -
- srch - The rectangle in the source area from the surface that is
- to be displayed.
-
- destx -
- desty -
- destw -
- desth - The rectangle in the destination drawable where the scaled
- source rectangle should be displayed.
-
- flags - this indicates the field to be displayed and can be XVMC_TOP_FIELD,
- XVMC_BOTTOM_FIELD or XVMC_FRAME_PICTURE. XVMC_FRAME_PICTURE
- displays both fields (weave).
-
- Errors:
-
- XvMCBadSurface - The surface is not valid.
-
- BadDrawable - The drawable does not exist.
-
-
-Status XvMCHideSurface(Display *display, XvMCSurface *surface)
-
- Stops display of a surface. This is only needed if the surface is an
- overlaid surface as indicated in the XvMCSurfaceInfo - it is a no-op
- otherwise.
-
- display - The connection to the server.
-
- surface - The surface to be hidden.
-
- Errors:
-
- XvMCBadSurface - The surface is not valid.
-
-
-/***********************************************************************/
-
- COMPOSITING THE SUBPICTURE
-
-/***********************************************************************/
-
-
-XvImageFormatValues * XvMCListSubpictureTypes (
- Display * display,
- XvPortID port,
- int surface_type_id,
- int *count_return
-)
-
- Returns an array of XvImageFormatValues supported by the surface_type_id
- describing the surface. The surface_type_id is acquired from the
- XvMCSurfaceInfo. This list should be freed with XFree().
-
- display - Specifies the connection to the X-server.
-
- port - Specifies the port we are interested in.
-
- surface_type_id - Specifies the surface type for which we want to
- query the supported subpicture types.
-
- count_return - the size of the returned array.
-
- Errors:
-
- BadPort - The port doesn't exist.
-
- BadAlloc - There are insufficient resources to complete this request.
-
- BadMatch - The surface type is not supported on that port.
-
-
-typedef struct {
- XID subpicture_id;
- XID context_id;
- int xvimage_id;
- unsigned short width;
- unsigned short height;
- int num_palette_entries;
- int entry_bytes;
- char component_order[4];
- void *privData; /* private to the library */
-} XvMCSubpicture;
-
-
- subpicture_id - An XID associated with this subpicture.
-
- context_id - The XID of the context this subpicture was created for.
-
- xvimage_id - The id descriptor of the XvImage format that may be used
- with this subpicture.
-
- width -
- height - The dimensions of the subpicture.
-
- num_palette_entries - For paletted formats only. This is the number
- of palette entries. It is zero for XvImages
- without palettes.
-
- entry_bytes - Each component is one byte and entry_bytes indicates
- the number of components in each entry (eg. 3 for
- YUV palette entries). This field is zero when
- palettes are not used.
-
- component_order - Is an array of ascii characters describing the order
- of the components within the bytes. Only entry_bytes
- characters of the string are used.
-
-Status
-XvMCCreateSubpicture (
- Display *display,
- XvMCContext *context,
- XvMCSubpicture *subpicture,
- unsigned short width,
- unsigned short height,
- int xvimage_id
-)
-
- This creates a subpicture by filling out the XvMCSubpicture structure
- passed to it and returning Success.
-
- display - Specifies the connection to the X-Server.
-
- context - The context to create the subpicture for.
-
- subpicture - Pre-allocated XvMCSubpicture structure to be filled
- out by this function.
-
- width -
- height - The dimensions of the subpicture.
-
- xvimage_id - The id describing the XvImage format.
-
-
- Errors:
-
- BadAlloc - There are insufficient resources to complete this request.
-
- XvMCBadContext - The specified context does not exist.
-
- BadMatch - The XvImage format id specified is not supported by
- the context.
-
- BadValue - If the size requested is larger than the max size reported
- in the XvMCSurfaceInfo.
-
-
-Status
-XvMCClearSubpicture (
- Display *display,
- XvMCSubpicture *subpicture,
- short x,
- short y,
- unsigned short width,
- unsigned short height,
- unsigned int color
-)
-
- Clear the area of the given subpicture to "color".
-
- display - The connection to the server.
-
- subpicture - The subpicture to clear.
-
- x -
- y -
- width -
- height - The rectangle in the subpicture to be cleared.
-
- color - The data to fill the rectangle with.
-
- Errors:
-
- XvMCBadSubpicture - The subpicture is invalid.
-
-Status
-XvMCCompositeSubpicture (
- Display *display,
- XvMCSubpicture *subpicture,
- XvImage *image,
- short srcx,
- short srcy,
- unsigned short width,
- unsigned short height,
- short dstx,
- short dsty
-)
-
- Copies the XvImage to the XvMCSubpicture.
-
- display - The connection to the server.
-
- subpicture - The subpicture used as the destination of the copy.
-
- image - The XvImage to be used as the source of the copy.
- XvImages should be of the shared memory variety for
- indirect contexts.
-
- srcx -
- srcy -
- width -
- height - The rectangle from the image to be composited.
-
- dstx -
- dsty - The location in the subpicture where the source rectangle
- should be composited.
-
- Errors:
-
- XvMCBadSubpicture - The subpicture is invalid.
-
- BadMatch - The subpicture does not support the type of XvImage
- passed to this function.
-
-Status
-XvMCDestroySubpicture (Display *display, XvMCSubpicture *subpicture)
-
- Destroys the specified subpicture.
-
- display - Specifies the connection to the X-server.
-
- subpicture - The subpicture to be destroyed.
-
- Errors:
-
- XvMCBadSubpicture - The subpicture specified does not exist.
-
-
-Status
-XvMCSetSubpicturePalette (
- Display *display,
- XvMCSubpicture *subpicture,
- unsigned char *palette
-)
-
- Set the subpicture's palette. This applies to paletted subpictures
- only.
-
- display - The connection to the server.
-
- subpicture - The subpicture on which to change the palette.
-
- palette - A pointer to an array holding the palette data. The
- size of this array is
-
- num_palette_entries * entry_bytes
-
- in size. The order of the components in the palette
- is described by the component_order in the XvMCSubpicture
- structure.
-
- Errors:
-
- XvMCBadSubpicture - The subpicture specified does not exist.
-
- BadMatch - The specified subpicture does not use palettes.
-
-
-Status
-XvMCBlendSubpicture (
- Display *display,
- XvMCSurface *target_surface,
- XvMCSubpicture *subpicture,
- short subx,
- short suby,
- unsigned short subw,
- unsigned short subh,
- short surfx,
- short surfy,
- unsigned short surfw,
- unsigned short surfh
-)
-
-Status
-XvMCBlendSubpicture2 (
- Display *display,
- XvMCSurface *source_surface,
- XvMCSurface *target_surface,
- XvMCSubpicture *subpicture,
- short subx,
- short suby,
- unsigned short subw,
- unsigned short subh,
- short surfx,
- short surfy,
- unsigned short surfw,
- unsigned short surfh
-)
-
- The behavior of these two functions is different depending on whether
-or not the XVMC_BACKEND_SUBPICTURE flag is set in the XvMCSurfaceInfo.
-
- XVMC_BACKEND_SUBPICTURE set:
-
- XvMCBlendSubpicture associates the subpicture with the target_surface.
- Both will be displayed at the next call to XvMCPutSurface. Additional
- blends before the call to XvMCPutSurface simply overrides the association.
- Both the target_surface and subpicture will query XVMC_DISPLAYING from
- the call to XvMCPutSurface until they are no longer displaying. It is
- safe to associate the subpicture and target_surface before rendering has
- completed (while they still query XVMC_RENDERING) but it is not safe to
- call XvMCPutSurface at that time.
-
- XvMCBlendSubpicture2 copies the source_surface to the target_surface
- and associates the subpicture with the target_surface. This essentially
- calls XvMCBlendSubpicture on the target_surface after the copy. Both
- the subpicture and target_surface will query XVMC_DISPLAYING from the
- call to XvMCPutSurface until they are no longer displaying. The
- source_surface will not query XVMC_DISPLAYING as a result of this function.
- The copy is pipelined with the rendering and will cause XVMC_RENDERING
- to be queried until the copy is done.
-
-
- XVMC_BACKEND_SUBPICTURE not set ("frontend" behavior):
-
- XvMCBlendSubpicture is a no-op in this case.
-
- XvMCBlendSubpicture2 blends the source_surface and subpicture and
- puts it in the target_surface. This does not effect the status of
- the source surface but will cause the target_surface to query
- XVMC_RENDERING until the blend is completed.
-
-
- display - The connection to the server.
-
- subpicture - The subpicture to be blended into the video.
-
- target_surface - The surface to be displayed with the blended subpicture.
-
- source_surface - Source surface prior to blending.
-
- subx -
- suby -
- subw -
- subh - The rectangle from the subpicture to be blended.
-
- surfx -
- surfy -
- surfw -
- surfh - The rectangle in the XvMCSurface to blend the subpicture rectangle
- into. If XVMC_SUBPICTURE_INDEPENDENT_SCALING is not set in the
- XvMCSurfaceInfo subw must be equal to surfw and subh must be
- equal to surfh height or else a BadValue error occurs.
-
- Errors:
-
- XvMCBadSurface - Any of the surfaces are invalid.
-
- XvMCBadSubpicture - The subpicture is invalid.
-
- BadMatch - The subpicture or any of the surfaces do not belong to the
- same context.
-
- BadValue - XVMC_SUBPICTURE_INDEPENDENT_SCALING is set and the source
- and destination rectangles are different sizes.
-
-
-/***********************************************************************/
-
- SURFACE SYNCHRONIZATION
-
-/***********************************************************************/
-
-
-#define XVMC_RENDERING 0x00000001
-#define XVMC_DISPLAYING 0x00000002
-
-Status
-XvMCSyncSurface (Display *display, XvMCSurface *surface)
-
- This function blocks until all rendering requests on the surface
- have been completed.
-
- display - The connection to the server.
-
- surface - The surface to synchronize.
-
- Errors:
-
- XvMCBadSurface - The surface is not valid.
-
-
-Status
-XvMCFlushSurface (Display *display, XvMCSurface *surface)
-
- This function commits pending rendering requests to ensure that
- they will be completed in a finite amount of time.
-
- display - The connnection to the server.
-
- surface - The surface whos rendering requests should be flushed.
-
- Errors:
-
- XvMCBadSurface - The surface is not valid.
-
-
-Status
-XvMCGetSurfaceStatus (Display *display, XvMCSurface *surface, int *stat)
-
- display - The connection to the server.
-
- surface - The surface whos status is being queried.
-
- stat - May be any of the following OR'd together:
-
- XVMC_RENDERING - The last XvMCRenderSurface request has not completed
- yet.
-
- XVMC_DISPLAYING - The surface is currently being displayed or a
- display is pending (ie. it is not safe to render
- to it).
-
- Errors:
-
- XvMCBadSurface - The surface is not valid.
-
-
-/***********************************************************************/
-
- SUBPICTURE SYNCHRONIZATION
-
-/***********************************************************************/
-
-
-
-Status
-XvMCSyncSubpicture (Display *display, XvMCSubpicture *subpicture)
-
- This function blocks until all composite/clear requests on the supicture
- have been completed.
-
- display - The connection to the server.
-
- subpicture - The subpicture to synchronize.
-
- Errors:
-
- XvMCBadSubpicture - The subpicture is not valid.
-
-
-Status
-XvMCFlushSubpicture (Display *display, XvMCSubpicture *subpicture)
-
- This function commits pending composite/clear requests to ensure that
- they will be completed in a finite amount of time.
-
- display - The connection to the server.
-
- subpicture - The subpicture whos compositing should be flushed.
-
- Errors:
-
- XvMCBadSubpicture - The surface is not valid.
-
-
-Status
-XvMCGetSubpictureStatus (Display *display, XvMCSubpicture *subpic, int *stat)
-
- display - The connection to the server.
-
- subpic - The subpicture whos status is being queried.
-
- stat - may be any of the following OR'd together:
-
- XVMC_RENDERING - The last XvMCCompositeSubpicture or XvMCClearSubpicture
- request has not completed yet.
-
- XVMC_DISPLAYING - The subpicture is currently being displayed or a
- display is pending (ie. it is not safe to render
- to it).
-
- Errors:
-
- XvMCBadSubpicture - The surface is not valid.
-
-/********************************************************************/
-
- ATTRIBUTES
-
-/********************************************************************/
-
- Context specific attribute functions are provided. These are
-similar to their Xv Counterparts XvQueryPortAttributes, XvSetPortAttribute
-and XvGetPortAttribute but their state is specific to the context.
-
-XvAttribute *
-XvMCQueryAttributes (
- Display *display,
- XvMCContext *context,
- int *number
-)
-
- An array of XvAttributes of size "number" is returned by this function.
- If there are no attributes, NULL is returned and number is set to 0.
- The array may be freed with XFree().
-
- display - The connection to the server.
-
- context - The context whos attributes we are querying.
-
- number - The returned number of recognized atoms.
-
- Errors:
-
- XvMCBadContext - The context is invalid.
-
-Status
-XvMCSetAttribute (
- Display *display,
- XvMCContext *context,
- Atom attribute,
- int value
-)
-
- This function sets a context-specific attribute and returns Success
- if no error has occurred.
-
- display - The connection to the server.
-
- context - The context for which the attribute change is to go into effect.
-
- attribute - The X Atom of the attribute to be changed.
-
- value - The new value of the attribute.
-
- Errors:
-
- XvMCBadContext - The context is not valid.
-
- BadValue - An invalid value was specified.
-
- BadMatch - This attribute is not defined for this context.
-
-Status
-XvMCGetAttribute (
- Display *display,
- XvMCContext *context,
- Atom attribute,
- int *value
-)
-
- This function queries a context-specific attribute and return
- Success and the value if no error has occurred.
-
- display - The connection to the server.
-
- context - The context whos attribute we are querying.
-
- attribute - The X Atom of the attribute to be retrieved.
-
- value - The returned attribute value.
-
- Errors:
-
- XvMCBadContext - The context is not valid.
-
- BadMatch - This attribute is not defined for this context.
-