diff options
author | Alan Coopersmith <alan.coopersmith@sun.com> | 2009-10-01 23:24:03 -0700 |
---|---|---|
committer | Alan Coopersmith <alan.coopersmith@sun.com> | 2009-10-01 23:24:03 -0700 |
commit | 11d244cdb677447947aebdca6ea44a74a3480cfe (patch) | |
tree | b79cab3d00e665852c745c1754ef12df4bfb5ca1 | |
parent | 6143ef460e0f5c1aca28effa2f4ec0c0a9ebe26a (diff) |
Move specs/XvMC/XvMC_API.txt to libXvMC module
Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | specs/XvMC/XvMC_API.txt | 1293 |
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. - |