|
Packit Service |
d3952c |
/*****************************************************************************
|
|
Packit Service |
d3952c |
* XvMC Wrapper including the Nonstandard VLD extension.
|
|
Packit Service |
d3952c |
*
|
|
Packit Service |
d3952c |
* Copyright (c) 2004 The Unichrome project. All rights reserved.
|
|
Packit Service |
d3952c |
*
|
|
Packit Service |
d3952c |
*
|
|
Packit Service |
d3952c |
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
Packit Service |
d3952c |
* copy of this software and associated documentation files (the "Software"),
|
|
Packit Service |
d3952c |
* to deal in the Software without restriction, including without limitation
|
|
Packit Service |
d3952c |
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
Packit Service |
d3952c |
* and/or sell copies of the Software, and to permit persons to whom the
|
|
Packit Service |
d3952c |
* Software is furnished to do so, subject to the following conditions:
|
|
Packit Service |
d3952c |
*
|
|
Packit Service |
d3952c |
* The above copyright notice and this permission notice shall be included in
|
|
Packit Service |
d3952c |
* all copies or substantial portions of the Software.
|
|
Packit Service |
d3952c |
*
|
|
Packit Service |
d3952c |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
Packit Service |
d3952c |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
Packit Service |
d3952c |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
Packit Service |
d3952c |
* AUTHOR(S) OR COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
Packit Service |
d3952c |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
Packit Service |
d3952c |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
Packit Service |
d3952c |
* DEALINGS IN THE SOFTWARE.
|
|
Packit Service |
d3952c |
*
|
|
Packit Service |
d3952c |
* Author: Thomas Hellström (2004)
|
|
Packit Service |
d3952c |
*/
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
/*
|
|
Packit Service |
d3952c |
* BUGS: The wrapper really should maintain one symbol table per port. This
|
|
Packit Service |
d3952c |
* could possibly be impemented, To do that, the port-independent symbols need to be lifted out,
|
|
Packit Service |
d3952c |
* and one would have to create a number of mapping tables:
|
|
Packit Service |
d3952c |
*
|
|
Packit Service |
d3952c |
* port -> symbol table
|
|
Packit Service |
d3952c |
* context -> port
|
|
Packit Service |
d3952c |
* surface -> port
|
|
Packit Service |
d3952c |
* subpicture -> port
|
|
Packit Service |
d3952c |
*
|
|
Packit Service |
d3952c |
* and reference the right table when needed.
|
|
Packit Service |
d3952c |
* This needs to be done only if there is a player that wants to access two displays with different
|
|
Packit Service |
d3952c |
* hardware simultaneously. Not likely as of today.
|
|
Packit Service |
d3952c |
*/
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
#ifdef HAVE_CONFIG_H
|
|
Packit Service |
d3952c |
#include "config.h"
|
|
Packit Service |
d3952c |
#endif
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
#include <X11/Xlib.h>
|
|
Packit Service |
d3952c |
#include <X11/extensions/XvMC.h>
|
|
Packit Service |
d3952c |
#include <X11/extensions/XvMClib.h>
|
|
Packit Service |
d3952c |
#include "X11/extensions/vldXvMC.h"
|
|
Packit Service |
d3952c |
#include <dlfcn.h>
|
|
Packit Service |
d3952c |
#include <stdio.h>
|
|
Packit Service |
d3952c |
#include <string.h>
|
|
Packit Service |
d3952c |
#include <ctype.h>
|
|
Packit Service |
d3952c |
#include <stdlib.h>
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
typedef Bool (*XvMCQueryExtensionP) (Display *, int *, int *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCQueryVersionP) (Display *, int *,int *);
|
|
Packit Service |
d3952c |
typedef XvMCSurfaceInfo * (*XvMCListSurfaceTypesP)(Display *, XvPortID, int *);
|
|
Packit Service |
d3952c |
typedef Status (* XvMCCreateContextP) (Display *,XvPortID,int ,int ,int ,int ,XvMCContext * );
|
|
Packit Service |
d3952c |
typedef Status (*XvMCDestroyContextP) (Display *, XvMCContext * );
|
|
Packit Service |
d3952c |
typedef Status (*XvMCCreateSurfaceP)(Display *,XvMCContext *,XvMCSurface *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCDestroySurfaceP)(Display *, XvMCSurface *);
|
|
Packit Service |
d3952c |
typedef XvImageFormatValues * (*XvMCListSubpictureTypesP) (Display *,XvPortID ,int ,int *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCPutSurfaceP)(Display *,XvMCSurface *,Drawable ,short , short , unsigned short ,
|
|
Packit Service |
d3952c |
unsigned short ,short ,short ,unsigned short ,unsigned short ,int );
|
|
Packit Service |
d3952c |
typedef Status (*XvMCHideSurfaceP)(Display *, XvMCSurface *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCCreateSubpictureP) (Display *, XvMCContext *, XvMCSubpicture *,
|
|
Packit Service |
d3952c |
unsigned short, unsigned short,int);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCClearSubpictureP) (Display *,XvMCSubpicture *,short,short,unsigned short,unsigned short,
|
|
Packit Service |
d3952c |
unsigned int);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCCompositeSubpictureP) (Display *, XvMCSubpicture *,XvImage *,short,short,
|
|
Packit Service |
d3952c |
unsigned short, unsigned short,short,short);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCDestroySubpictureP) (Display *, XvMCSubpicture *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCSetSubpicturePaletteP) (Display *, XvMCSubpicture *, unsigned char *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCBlendSubpictureP) (Display *d,XvMCSurface *,XvMCSubpicture *,short,
|
|
Packit Service |
d3952c |
short,unsigned short,unsigned short,short,short,
|
|
Packit Service |
d3952c |
unsigned short,unsigned short);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCBlendSubpicture2P) (Display *,XvMCSurface *,XvMCSurface *,
|
|
Packit Service |
d3952c |
XvMCSubpicture *,short,short,unsigned short,
|
|
Packit Service |
d3952c |
unsigned short,short,short,unsigned short,
|
|
Packit Service |
d3952c |
unsigned short);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCSyncSurfaceP) (Display *, XvMCSurface *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCFlushSurfaceP) (Display *, XvMCSurface *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCGetSurfaceStatusP) (Display *, XvMCSurface *, int *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCRenderSurfaceP) (Display *,XvMCContext *,unsigned int,XvMCSurface *,
|
|
Packit Service |
d3952c |
XvMCSurface *,XvMCSurface *,unsigned int,unsigned int,
|
|
Packit Service |
d3952c |
unsigned int,XvMCMacroBlockArray *,XvMCBlockArray *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCSyncSubpictureP) (Display *, XvMCSubpicture *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCFlushSubpictureP) (Display *, XvMCSubpicture *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCGetSubpictureStatusP) (Display *, XvMCSubpicture *, int *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCCreateBlocksP) (Display *, XvMCContext *,unsigned int,XvMCBlockArray *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCDestroyBlocksP) (Display *,XvMCBlockArray *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCCreateMacroBlocksP) (Display *,XvMCContext *,unsigned int,
|
|
Packit Service |
d3952c |
XvMCMacroBlockArray *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCDestroyMacroBlocksP) (Display *,XvMCMacroBlockArray *);
|
|
Packit Service |
d3952c |
typedef XvAttribute *(*XvMCQueryAttributesP) (Display *,XvMCContext *,int *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCSetAttributeP) (Display *,XvMCContext *, Atom, int);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCGetAttributeP) (Display *,XvMCContext *, Atom, int *);
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
/*
|
|
Packit Service |
d3952c |
* Nonstandard VLD acceleration level:
|
|
Packit Service |
d3952c |
*/
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
typedef Status (*XvMCBeginSurfaceP) (Display *,XvMCContext *,XvMCSurface *,
|
|
Packit Service |
d3952c |
XvMCSurface *,XvMCSurface *f,const XvMCMpegControl *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCLoadQMatrixP) (Display *, XvMCContext *,const XvMCQMatrix *);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCPutSliceP)(Display *,XvMCContext *, char *,int);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCPutSlice2P)(Display *,XvMCContext *, char *,int, unsigned);
|
|
Packit Service |
d3952c |
typedef Status (*XvMCGetDRInfoP)(Display *, XvPortID, char **, char **, int *, int *,
|
|
Packit Service |
d3952c |
int *, int *);
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
typedef struct {
|
|
Packit Service |
d3952c |
XvMCQueryExtensionP XvMCQueryExtension;
|
|
Packit Service |
d3952c |
XvMCQueryVersionP XvMCQueryVersion;
|
|
Packit Service |
d3952c |
XvMCListSurfaceTypesP XvMCListSurfaceTypes;
|
|
Packit Service |
d3952c |
XvMCCreateContextP XvMCCreateContext;
|
|
Packit Service |
d3952c |
XvMCDestroyContextP XvMCDestroyContext;
|
|
Packit Service |
d3952c |
XvMCCreateSurfaceP XvMCCreateSurface;
|
|
Packit Service |
d3952c |
XvMCDestroySurfaceP XvMCDestroySurface;
|
|
Packit Service |
d3952c |
XvMCListSubpictureTypesP XvMCListSubpictureTypes;
|
|
Packit Service |
d3952c |
XvMCPutSurfaceP XvMCPutSurface;
|
|
Packit Service |
d3952c |
XvMCHideSurfaceP XvMCHideSurface;
|
|
Packit Service |
d3952c |
XvMCCreateSubpictureP XvMCCreateSubpicture;
|
|
Packit Service |
d3952c |
XvMCClearSubpictureP XvMCClearSubpicture;
|
|
Packit Service |
d3952c |
XvMCCompositeSubpictureP XvMCCompositeSubpicture;
|
|
Packit Service |
d3952c |
XvMCDestroySubpictureP XvMCDestroySubpicture;
|
|
Packit Service |
d3952c |
XvMCSetSubpicturePaletteP XvMCSetSubpicturePalette;
|
|
Packit Service |
d3952c |
XvMCBlendSubpictureP XvMCBlendSubpicture;
|
|
Packit Service |
d3952c |
XvMCBlendSubpicture2P XvMCBlendSubpicture2;
|
|
Packit Service |
d3952c |
XvMCSyncSurfaceP XvMCSyncSurface;
|
|
Packit Service |
d3952c |
XvMCFlushSurfaceP XvMCFlushSurface;
|
|
Packit Service |
d3952c |
XvMCGetSurfaceStatusP XvMCGetSurfaceStatus;
|
|
Packit Service |
d3952c |
XvMCRenderSurfaceP XvMCRenderSurface;
|
|
Packit Service |
d3952c |
XvMCSyncSubpictureP XvMCSyncSubpicture;
|
|
Packit Service |
d3952c |
XvMCFlushSubpictureP XvMCFlushSubpicture;
|
|
Packit Service |
d3952c |
XvMCGetSubpictureStatusP XvMCGetSubpictureStatus;
|
|
Packit Service |
d3952c |
XvMCCreateBlocksP XvMCCreateBlocks;
|
|
Packit Service |
d3952c |
XvMCDestroyBlocksP XvMCDestroyBlocks;
|
|
Packit Service |
d3952c |
XvMCCreateMacroBlocksP XvMCCreateMacroBlocks;
|
|
Packit Service |
d3952c |
XvMCDestroyMacroBlocksP XvMCDestroyMacroBlocks;
|
|
Packit Service |
d3952c |
XvMCQueryAttributesP XvMCQueryAttributes;
|
|
Packit Service |
d3952c |
XvMCSetAttributeP XvMCSetAttribute;
|
|
Packit Service |
d3952c |
XvMCGetAttributeP XvMCGetAttribute;
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
/*
|
|
Packit Service |
d3952c |
* Nonstandard VLD acceleration level:
|
|
Packit Service |
d3952c |
*/
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
XvMCBeginSurfaceP XvMCBeginSurface;
|
|
Packit Service |
d3952c |
XvMCLoadQMatrixP XvMCLoadQMatrix;
|
|
Packit Service |
d3952c |
XvMCPutSliceP XvMCPutSlice;
|
|
Packit Service |
d3952c |
XvMCPutSlice2P XvMCPutSlice2;
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
/*
|
|
Packit Service |
d3952c |
* Driver name function.
|
|
Packit Service |
d3952c |
*/
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
XvMCGetDRInfoP XvMCGetDRInfo;
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
int preInitialised;
|
|
Packit Service |
d3952c |
int initialised;
|
|
Packit Service |
d3952c |
int vldextension;
|
|
Packit Service |
d3952c |
} XvMCWrapper;
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
static XvMCWrapper xW;
|
|
Packit Service |
d3952c |
static int wrapperInit = 0;
|
|
Packit Service |
d3952c |
static int wrapperPreInit = 0;
|
|
Packit Service |
d3952c |
static void *xvhandle;
|
|
Packit Service |
d3952c |
static void *handle2;
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
#define BUFLEN 200
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
#define STRS(ARG) STR(ARG)
|
|
Packit Service |
d3952c |
#define STR(ARG) #ARG
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
#define XW_RSYM(base,handle,handle2,pointer, retval) \
|
|
Packit Service |
d3952c |
do { \
|
|
Packit Service |
d3952c |
register char *symerr; \
|
|
Packit Service |
d3952c |
base.pointer = (pointer##P) dlsym((handle),#pointer); \
|
|
Packit Service |
d3952c |
if ((symerr = dlerror()) != NULL) { \
|
|
Packit Service |
d3952c |
if (!handle2) { \
|
|
Packit Service |
d3952c |
fprintf(stderr,"%s\n",symerr); return retval; \
|
|
Packit Service |
d3952c |
} \
|
|
Packit Service |
d3952c |
base.pointer = (pointer##P) dlsym((handle2),#pointer); \
|
|
Packit Service |
d3952c |
if ((symerr = dlerror()) != NULL) { \
|
|
Packit Service |
d3952c |
fprintf(stderr,"%s\n",symerr); return retval; \
|
|
Packit Service |
d3952c |
} \
|
|
Packit Service |
d3952c |
} \
|
|
Packit Service |
d3952c |
} while (0);
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
#define XW_RSYM2(base,handle,handle2,pointer) \
|
|
Packit Service |
d3952c |
base.pointer = (pointer##P) dlsym((handle),#pointer); \
|
|
Packit Service |
d3952c |
if (dlerror() != NULL) { \
|
|
Packit Service |
d3952c |
base.pointer = (pointer##P) dlsym((handle2),#pointer); \
|
|
Packit Service |
d3952c |
if (dlerror() != NULL) return; \
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
/*
|
|
Packit Service |
d3952c |
* Try to dlopen a shared library, versionless first.
|
|
Packit Service |
d3952c |
*/
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
static void *dlopenversion(const char *lib, const char *version, int flag)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
void *ret;
|
|
Packit Service |
d3952c |
int curLen,verLen;
|
|
Packit Service |
d3952c |
char *curName;
|
|
Packit Service |
d3952c |
const char *tail;
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
curLen = strlen(lib) + (verLen = strlen(version)) + 1;
|
|
Packit Service |
d3952c |
curName = (char *) malloc(curLen * sizeof(char));
|
|
Packit Service |
d3952c |
strncpy( curName, lib, curLen);
|
|
Packit Service |
d3952c |
if (verLen > 1) {
|
|
Packit Service |
d3952c |
if (NULL != (tail = strstr(version+1,"."))) {
|
|
Packit Service |
d3952c |
strncat( curName, version, tail - version);
|
|
Packit Service |
d3952c |
} else {
|
|
Packit Service |
d3952c |
strncat( curName, version, verLen);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
ret = dlopen(curName, flag);
|
|
Packit Service |
d3952c |
free(curName);
|
|
Packit Service |
d3952c |
return ret;
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
static int preInitW(Display *dpy)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
/*
|
|
Packit Service |
d3952c |
* Resolve functions that are not hw driver specific.
|
|
Packit Service |
d3952c |
*/
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
void *handleZ = NULL;
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
wrapperPreInit = 1;
|
|
Packit Service |
d3952c |
xW.preInitialised = 0;
|
|
Packit Service |
d3952c |
xW.initialised = 0;
|
|
Packit Service |
d3952c |
xvhandle = dlopenversion("libXv.so", XV_SOVERSION, RTLD_LAZY | RTLD_GLOBAL);
|
|
Packit Service |
d3952c |
if (!xvhandle) {
|
|
Packit Service |
d3952c |
fprintf(stderr,"XvMCWrapper: Warning! Could not open shared "
|
|
Packit Service |
d3952c |
"library \"libXv.so" XV_SOVERSION "\"\nThis may cause relocation "
|
|
Packit Service |
d3952c |
"errors later.\nError was: \"%s\".\n",dlerror());
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
handle2 = dlopenversion("libXvMC.so", XVMC_SOVERSION, RTLD_LAZY | RTLD_GLOBAL);
|
|
Packit Service |
d3952c |
if (!handle2) {
|
|
Packit Service |
d3952c |
fprintf(stderr,"XvMCWrapper: Could not load XvMC "
|
|
Packit Service |
d3952c |
"library \"libXvMC.so" XVMC_SOVERSION "\". Failing\n");
|
|
Packit Service |
d3952c |
fprintf(stderr,"%s\n",dlerror());
|
|
Packit Service |
d3952c |
return 1;
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle2, handleZ, XvMCQueryExtension, 1);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle2, handleZ, XvMCQueryVersion, 1);
|
|
Packit Service |
d3952c |
xW.preInitialised = 1;
|
|
Packit Service |
d3952c |
return 0;
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
static void initW(Display *dpy, XvPortID port)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
char nameBuffer[BUFLEN];
|
|
Packit Service |
d3952c |
void *handle;
|
|
Packit Service |
d3952c |
int tmp;
|
|
Packit Service |
d3952c |
char *clientName = NULL;
|
|
Packit Service |
d3952c |
char *err;
|
|
Packit Service |
d3952c |
FILE *configFile;
|
|
Packit Service |
d3952c |
int nameLen = 0;
|
|
Packit Service |
d3952c |
int major,minor,patchLevel,isLocal;
|
|
Packit Service |
d3952c |
char *busID = NULL;
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
wrapperInit = 1;
|
|
Packit Service |
d3952c |
xW.initialised = 0;
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
if (!wrapperPreInit)
|
|
Packit Service |
d3952c |
if (preInitW( dpy )) return;
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
/*
|
|
Packit Service |
d3952c |
* Will the DDX tell us the client driver name?
|
|
Packit Service |
d3952c |
*/
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
xW.XvMCGetDRInfo = (XvMCGetDRInfoP)
|
|
Packit Service |
d3952c |
dlsym(handle2,"XvMCGetDRInfo");
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
if ((err = dlerror()) == NULL) {
|
|
Packit Service |
d3952c |
if (0 == xW.XvMCGetDRInfo( dpy, port, &clientName, &busID, &major,
|
|
Packit Service |
d3952c |
&minor,&patchLevel, &isLocal)) {
|
|
Packit Service |
d3952c |
nameLen = strlen(clientName);
|
|
Packit Service |
d3952c |
XFree(busID);
|
|
Packit Service |
d3952c |
if (!isLocal) {
|
|
Packit Service |
d3952c |
fprintf(stderr,"XvMCWrapper: X server is not local. Cannot run XvMC.\n");
|
|
Packit Service |
d3952c |
XFree(clientName);
|
|
Packit Service |
d3952c |
return;
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
} else {
|
|
Packit Service |
d3952c |
clientName = NULL;
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
if (clientName && (nameLen < BUFLEN-7) && (nameLen > 0)) {
|
|
Packit Service |
d3952c |
nameLen += 3;
|
|
Packit Service |
d3952c |
strncpy(nameBuffer,"lib",BUFLEN-1);
|
|
Packit Service |
d3952c |
strncpy(nameBuffer+3, clientName, BUFLEN-4);
|
|
Packit Service |
d3952c |
strncpy(nameBuffer + nameLen, ".so", BUFLEN-nameLen-1);
|
|
Packit Service |
d3952c |
nameBuffer[BUFLEN-1] = 0;
|
|
Packit Service |
d3952c |
XFree(clientName);
|
|
Packit Service |
d3952c |
handle = dlopenversion(nameBuffer, XVMC_SOVERSION,RTLD_LAZY);
|
|
Packit Service |
d3952c |
} else {
|
|
Packit Service |
d3952c |
/*
|
|
Packit Service |
d3952c |
* No. Try to obtain it from the config file.
|
|
Packit Service |
d3952c |
*/
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
if (clientName) XFree(clientName);
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
configFile = fopen(STRS(XVMC_CONFIGDIR) "/XvMCConfig","r");
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
xW.initialised = 0;
|
|
Packit Service |
d3952c |
xW.vldextension = 0;
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
if (NULL == configFile) {
|
|
Packit Service |
d3952c |
fprintf(stderr,"XvMCWrapper: Could not open config file \"%s\".\n",
|
|
Packit Service |
d3952c |
STRS(XVMC_CONFIGDIR) "/XvMCConfig");
|
|
Packit Service |
d3952c |
perror("XvMCWrapper");
|
|
Packit Service |
d3952c |
return;
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
if (NULL == fgets(nameBuffer, BUFLEN, configFile)) {
|
|
Packit Service |
d3952c |
fclose(configFile);
|
|
Packit Service |
d3952c |
fprintf(stderr,"XvMCWrapper: Could not read XvMC library name.\n");
|
|
Packit Service |
d3952c |
perror("XvMCWrapper");
|
|
Packit Service |
d3952c |
return;
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
fclose(configFile);
|
|
Packit Service |
d3952c |
if ((tmp = strlen(nameBuffer)) == 0) {
|
|
Packit Service |
d3952c |
fprintf(stderr,"XvMCWrapper: Zero length XvMC library name.\n");
|
|
Packit Service |
d3952c |
fprintf(stderr,"%s\n",dlerror());
|
|
Packit Service |
d3952c |
return;
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
/*
|
|
Packit Service |
d3952c |
* Skip trailing newlines and garbage.
|
|
Packit Service |
d3952c |
*/
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
while (iscntrl(nameBuffer[tmp-1])) {
|
|
Packit Service |
d3952c |
nameBuffer[tmp-1] = 0;
|
|
Packit Service |
d3952c |
if (--tmp == 0) {
|
|
Packit Service |
d3952c |
fprintf(stderr,"XvMCWrapper: Zero length XvMC library name.\n");
|
|
Packit Service |
d3952c |
return;
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
handle = dlopen(nameBuffer,RTLD_LAZY);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
if (!handle) {
|
|
Packit Service |
d3952c |
fprintf(stderr,"XvMCWrapper: Could not load hardware specific XvMC "
|
|
Packit Service |
d3952c |
"library \"%s\".\n",nameBuffer);
|
|
Packit Service |
d3952c |
fprintf(stderr,"%s\n",dlerror());
|
|
Packit Service |
d3952c |
return;
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCListSurfaceTypes,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCCreateContext,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCDestroyContext,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCCreateSurface,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCDestroySurface,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCListSubpictureTypes,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCHideSurface,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCCreateSubpicture,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCClearSubpicture,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCCompositeSubpicture,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCDestroySubpicture,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCSetSubpicturePalette,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCBlendSubpicture,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCBlendSubpicture2,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCPutSurface,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCSyncSurface,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCFlushSurface,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCGetSurfaceStatus,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCRenderSurface,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCSyncSubpicture,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCFlushSubpicture,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCGetSubpictureStatus,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCCreateBlocks,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCDestroyBlocks,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCCreateMacroBlocks,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCDestroyMacroBlocks,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCQueryAttributes,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCSetAttribute,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCGetAttribute,);
|
|
Packit Service |
d3952c |
xW.initialised = 1;
|
|
Packit Service |
d3952c |
XW_RSYM2(xW, handle, handle2, XvMCBeginSurface);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCLoadQMatrix,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCPutSlice,);
|
|
Packit Service |
d3952c |
XW_RSYM(xW, handle, handle2, XvMCPutSlice2,);
|
|
Packit Service |
d3952c |
xW.vldextension = 1;
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Bool XvMCQueryExtension (Display *display, int *eventBase, int *errBase)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!wrapperPreInit) preInitW( display );
|
|
Packit Service |
d3952c |
if (!xW.preInitialised) return 0;
|
|
Packit Service |
d3952c |
return (*xW.XvMCQueryExtension)(display, eventBase, errBase);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCQueryVersion (Display *display, int *major_versionp,
|
|
Packit Service |
d3952c |
int *minor_versionp)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!wrapperPreInit) preInitW( display );
|
|
Packit Service |
d3952c |
if (!xW.preInitialised) return 0;
|
|
Packit Service |
d3952c |
return (*xW.XvMCQueryVersion)(display, major_versionp, minor_versionp);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
XvMCSurfaceInfo * XvMCListSurfaceTypes(Display *dpy, XvPortID port, int *num)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!wrapperInit) initW( dpy, port);
|
|
Packit Service |
d3952c |
if (!xW.initialised) return NULL;
|
|
Packit Service |
d3952c |
return (*xW.XvMCListSurfaceTypes)(dpy, port, num);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCCreateContext (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvPortID port,
|
|
Packit Service |
d3952c |
int surface_type_id,
|
|
Packit Service |
d3952c |
int width,
|
|
Packit Service |
d3952c |
int height,
|
|
Packit Service |
d3952c |
int flags,
|
|
Packit Service |
d3952c |
XvMCContext * context
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!wrapperInit) initW(display, port);
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCCreateContext)(display, port, surface_type_id,
|
|
Packit Service |
d3952c |
width, height, flags, context);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCDestroyContext (Display *display, XvMCContext * context)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCDestroyContext)(display, context);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCCreateSurface(
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCContext * context,
|
|
Packit Service |
d3952c |
XvMCSurface * surface
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCCreateSurface)(display, context, surface);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCDestroySurface(Display *display, XvMCSurface *surface)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCDestroySurface)(display, surface);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
XvImageFormatValues * XvMCListSubpictureTypes (
|
|
Packit Service |
d3952c |
Display * display,
|
|
Packit Service |
d3952c |
XvPortID port,
|
|
Packit Service |
d3952c |
int surface_type_id,
|
|
Packit Service |
d3952c |
int *count_return
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return NULL;
|
|
Packit Service |
d3952c |
return (*xW.XvMCListSubpictureTypes)(display, port, surface_type_id,
|
|
Packit Service |
d3952c |
count_return);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCPutSurface(
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCSurface *surface,
|
|
Packit Service |
d3952c |
Drawable draw,
|
|
Packit Service |
d3952c |
short srcx,
|
|
Packit Service |
d3952c |
short srcy,
|
|
Packit Service |
d3952c |
unsigned short srcw,
|
|
Packit Service |
d3952c |
unsigned short srch,
|
|
Packit Service |
d3952c |
short destx,
|
|
Packit Service |
d3952c |
short desty,
|
|
Packit Service |
d3952c |
unsigned short destw,
|
|
Packit Service |
d3952c |
unsigned short desth,
|
|
Packit Service |
d3952c |
int flags
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCPutSurface)(display, surface, draw, srcx, srcy, srcw, srch,
|
|
Packit Service |
d3952c |
destx, desty, destw, desth, flags);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCHideSurface(Display *display, XvMCSurface *surface)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCHideSurface)(display, surface);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCCreateSubpicture (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCContext *context,
|
|
Packit Service |
d3952c |
XvMCSubpicture *subpicture,
|
|
Packit Service |
d3952c |
unsigned short width,
|
|
Packit Service |
d3952c |
unsigned short height,
|
|
Packit Service |
d3952c |
int xvimage_id
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCCreateSubpicture)(display, context, subpicture, width, height,
|
|
Packit Service |
d3952c |
xvimage_id);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCClearSubpicture (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCSubpicture *subpicture,
|
|
Packit Service |
d3952c |
short x,
|
|
Packit Service |
d3952c |
short y,
|
|
Packit Service |
d3952c |
unsigned short width,
|
|
Packit Service |
d3952c |
unsigned short height,
|
|
Packit Service |
d3952c |
unsigned int color
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCClearSubpicture)(display, subpicture, x, y, width, height, color);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCCompositeSubpicture (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCSubpicture *subpicture,
|
|
Packit Service |
d3952c |
XvImage *image,
|
|
Packit Service |
d3952c |
short srcx,
|
|
Packit Service |
d3952c |
short srcy,
|
|
Packit Service |
d3952c |
unsigned short width,
|
|
Packit Service |
d3952c |
unsigned short height,
|
|
Packit Service |
d3952c |
short dstx,
|
|
Packit Service |
d3952c |
short dsty
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCCompositeSubpicture)(display, subpicture, image, srcx, srcy,
|
|
Packit Service |
d3952c |
width, height, dstx, dsty);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCDestroySubpicture (Display *display, XvMCSubpicture *subpicture)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCDestroySubpicture)(display, subpicture);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCSetSubpicturePalette (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCSubpicture *subpicture,
|
|
Packit Service |
d3952c |
unsigned char *palette
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCSetSubpicturePalette)(display, subpicture, palette);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCBlendSubpicture (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCSurface *target_surface,
|
|
Packit Service |
d3952c |
XvMCSubpicture *subpicture,
|
|
Packit Service |
d3952c |
short subx,
|
|
Packit Service |
d3952c |
short suby,
|
|
Packit Service |
d3952c |
unsigned short subw,
|
|
Packit Service |
d3952c |
unsigned short subh,
|
|
Packit Service |
d3952c |
short surfx,
|
|
Packit Service |
d3952c |
short surfy,
|
|
Packit Service |
d3952c |
unsigned short surfw,
|
|
Packit Service |
d3952c |
unsigned short surfh
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCBlendSubpicture)(display, target_surface, subpicture,
|
|
Packit Service |
d3952c |
subx, suby, subw, subh, surfx, surfy,
|
|
Packit Service |
d3952c |
surfw, surfh);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCBlendSubpicture2 (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCSurface *source_surface,
|
|
Packit Service |
d3952c |
XvMCSurface *target_surface,
|
|
Packit Service |
d3952c |
XvMCSubpicture *subpicture,
|
|
Packit Service |
d3952c |
short subx,
|
|
Packit Service |
d3952c |
short suby,
|
|
Packit Service |
d3952c |
unsigned short subw,
|
|
Packit Service |
d3952c |
unsigned short subh,
|
|
Packit Service |
d3952c |
short surfx,
|
|
Packit Service |
d3952c |
short surfy,
|
|
Packit Service |
d3952c |
unsigned short surfw,
|
|
Packit Service |
d3952c |
unsigned short surfh
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCBlendSubpicture2)(display, source_surface, target_surface, subpicture,
|
|
Packit Service |
d3952c |
subx, suby, subw, subh, surfx, surfy, surfw, surfh);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCSyncSurface (Display *display, XvMCSurface *surface)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCSyncSurface)(display, surface);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCFlushSurface (Display *display, XvMCSurface *surface)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCFlushSurface)(display, surface);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCGetSurfaceStatus (Display *display, XvMCSurface *surface, int *stat)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCGetSurfaceStatus)(display, surface, stat);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCRenderSurface (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCContext *context,
|
|
Packit Service |
d3952c |
unsigned int picture_structure,
|
|
Packit Service |
d3952c |
XvMCSurface *target_surface,
|
|
Packit Service |
d3952c |
XvMCSurface *past_surface,
|
|
Packit Service |
d3952c |
XvMCSurface *future_surface,
|
|
Packit Service |
d3952c |
unsigned int flags,
|
|
Packit Service |
d3952c |
unsigned int num_macroblocks,
|
|
Packit Service |
d3952c |
unsigned int first_macroblock,
|
|
Packit Service |
d3952c |
XvMCMacroBlockArray *macroblock_array,
|
|
Packit Service |
d3952c |
XvMCBlockArray *blocks
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCRenderSurface)(display, context, picture_structure, target_surface,
|
|
Packit Service |
d3952c |
past_surface, future_surface, flags, num_macroblocks,
|
|
Packit Service |
d3952c |
first_macroblock, macroblock_array, blocks);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCSyncSubpicture (Display *display, XvMCSubpicture *subpicture)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCSyncSubpicture)(display, subpicture);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCFlushSubpicture (Display *display, XvMCSubpicture *subpicture)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCFlushSubpicture)(display, subpicture);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCGetSubpictureStatus (Display *display, XvMCSubpicture *subpic, int *stat)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCGetSubpictureStatus)(display, subpic, stat);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCCreateBlocks (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCContext *context,
|
|
Packit Service |
d3952c |
unsigned int num_blocks,
|
|
Packit Service |
d3952c |
XvMCBlockArray *block
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCCreateBlocks)(display, context, num_blocks, block);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCDestroyBlocks (Display *display,XvMCBlockArray *block)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCDestroyBlocks)(display, block);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCCreateMacroBlocks (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCContext *context,
|
|
Packit Service |
d3952c |
unsigned int num_blocks,
|
|
Packit Service |
d3952c |
XvMCMacroBlockArray *blocks
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCCreateMacroBlocks)(display, context, num_blocks, blocks);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCDestroyMacroBlocks (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCMacroBlockArray *block
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCDestroyMacroBlocks)(display, block);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
XvAttribute *
|
|
Packit Service |
d3952c |
XvMCQueryAttributes (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCContext *context,
|
|
Packit Service |
d3952c |
int *number
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return NULL;
|
|
Packit Service |
d3952c |
return (*xW.XvMCQueryAttributes)(display, context, number);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCSetAttribute (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCContext *context,
|
|
Packit Service |
d3952c |
Atom attribute,
|
|
Packit Service |
d3952c |
int value
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCSetAttribute)(display, context, attribute, value);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status
|
|
Packit Service |
d3952c |
XvMCGetAttribute (
|
|
Packit Service |
d3952c |
Display *display,
|
|
Packit Service |
d3952c |
XvMCContext *context,
|
|
Packit Service |
d3952c |
Atom attribute,
|
|
Packit Service |
d3952c |
int *value
|
|
Packit Service |
d3952c |
)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.initialised) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCGetAttribute)(display, context, attribute, value);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCBeginSurface(Display *display,
|
|
Packit Service |
d3952c |
XvMCContext *context,
|
|
Packit Service |
d3952c |
XvMCSurface *target_surface,
|
|
Packit Service |
d3952c |
XvMCSurface *past_surface,
|
|
Packit Service |
d3952c |
XvMCSurface *future_surface,
|
|
Packit Service |
d3952c |
const XvMCMpegControl *control)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.vldextension) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCBeginSurface)(display, context, target_surface, past_surface, future_surface,
|
|
Packit Service |
d3952c |
control);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCLoadQMatrix(Display *display, XvMCContext *context,
|
|
Packit Service |
d3952c |
const XvMCQMatrix *qmx)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.vldextension) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCLoadQMatrix)(display, context, qmx);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCPutSlice(Display *display,XvMCContext *context,
|
|
Packit Service |
d3952c |
char *slice, int nBytes)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.vldextension) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCPutSlice)(display, context, slice, nBytes);
|
|
Packit Service |
d3952c |
}
|
|
Packit Service |
d3952c |
|
|
Packit Service |
d3952c |
Status XvMCPutSlice2(Display *display,XvMCContext *context,
|
|
Packit Service |
d3952c |
char *slice, int nBytes, int sliceCode)
|
|
Packit Service |
d3952c |
{
|
|
Packit Service |
d3952c |
if (!xW.vldextension) return BadValue;
|
|
Packit Service |
d3952c |
return (*xW.XvMCPutSlice2)(display, context, slice, nBytes, sliceCode);
|
|
Packit Service |
d3952c |
}
|