1*4882a593Smuzhiyun /*********************************************************** 2*4882a593Smuzhiyun Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts, 3*4882a593Smuzhiyun and the Massachusetts Institute of Technology, Cambridge, Massachusetts. 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun All Rights Reserved 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun Permission to use, copy, modify, and distribute this software and its 8*4882a593Smuzhiyun documentation for any purpose and without fee is hereby granted, 9*4882a593Smuzhiyun provided that the above copyright notice appear in all copies and that 10*4882a593Smuzhiyun both that copyright notice and this permission notice appear in 11*4882a593Smuzhiyun supporting documentation, and that the names of Digital or MIT not be 12*4882a593Smuzhiyun used in advertising or publicity pertaining to distribution of the 13*4882a593Smuzhiyun software without specific, written prior permission. 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 16*4882a593Smuzhiyun ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 17*4882a593Smuzhiyun DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 18*4882a593Smuzhiyun ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 19*4882a593Smuzhiyun WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 20*4882a593Smuzhiyun ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 21*4882a593Smuzhiyun SOFTWARE. 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun ******************************************************************/ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun #ifndef XVDIX_H 26*4882a593Smuzhiyun #define XVDIX_H 27*4882a593Smuzhiyun /* 28*4882a593Smuzhiyun ** File: 29*4882a593Smuzhiyun ** 30*4882a593Smuzhiyun ** xvdix.h --- Xv device independent header file 31*4882a593Smuzhiyun ** 32*4882a593Smuzhiyun ** Author: 33*4882a593Smuzhiyun ** 34*4882a593Smuzhiyun ** David Carver (Digital Workstation Engineering/Project Athena) 35*4882a593Smuzhiyun ** 36*4882a593Smuzhiyun ** Revisions: 37*4882a593Smuzhiyun ** 38*4882a593Smuzhiyun ** 29.08.91 Carver 39*4882a593Smuzhiyun ** - removed UnrealizeWindow wrapper unrealizing windows no longer 40*4882a593Smuzhiyun ** preempts video 41*4882a593Smuzhiyun ** 42*4882a593Smuzhiyun ** 11.06.91 Carver 43*4882a593Smuzhiyun ** - changed SetPortControl to SetPortAttribute 44*4882a593Smuzhiyun ** - changed GetPortControl to GetPortAttribute 45*4882a593Smuzhiyun ** - changed QueryBestSize 46*4882a593Smuzhiyun ** 47*4882a593Smuzhiyun ** 15.05.91 Carver 48*4882a593Smuzhiyun ** - version 2.0 upgrade 49*4882a593Smuzhiyun ** 50*4882a593Smuzhiyun ** 24.01.91 Carver 51*4882a593Smuzhiyun ** - version 1.4 upgrade 52*4882a593Smuzhiyun ** 53*4882a593Smuzhiyun */ 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun #include "scrnintstr.h" 56*4882a593Smuzhiyun #include <X11/extensions/Xvproto.h> 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun extern _X_EXPORT unsigned long XvExtensionGeneration; 59*4882a593Smuzhiyun extern _X_EXPORT unsigned long XvScreenGeneration; 60*4882a593Smuzhiyun extern _X_EXPORT unsigned long XvResourceGeneration; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun extern _X_EXPORT int XvReqCode; 63*4882a593Smuzhiyun extern _X_EXPORT int XvEventBase; 64*4882a593Smuzhiyun extern _X_EXPORT int XvErrorBase; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun extern _X_EXPORT RESTYPE XvRTPort; 67*4882a593Smuzhiyun extern _X_EXPORT RESTYPE XvRTEncoding; 68*4882a593Smuzhiyun extern _X_EXPORT RESTYPE XvRTGrab; 69*4882a593Smuzhiyun extern _X_EXPORT RESTYPE XvRTVideoNotify; 70*4882a593Smuzhiyun extern _X_EXPORT RESTYPE XvRTVideoNotifyList; 71*4882a593Smuzhiyun extern _X_EXPORT RESTYPE XvRTPortNotify; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun typedef struct { 74*4882a593Smuzhiyun int numerator; 75*4882a593Smuzhiyun int denominator; 76*4882a593Smuzhiyun } XvRationalRec, *XvRationalPtr; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun typedef struct { 79*4882a593Smuzhiyun char depth; 80*4882a593Smuzhiyun unsigned long visual; 81*4882a593Smuzhiyun } XvFormatRec, *XvFormatPtr; 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun typedef struct { 84*4882a593Smuzhiyun unsigned long id; 85*4882a593Smuzhiyun ClientPtr client; 86*4882a593Smuzhiyun } XvGrabRec, *XvGrabPtr; 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun typedef struct _XvVideoNotifyRec { 89*4882a593Smuzhiyun struct _XvVideoNotifyRec *next; 90*4882a593Smuzhiyun ClientPtr client; 91*4882a593Smuzhiyun unsigned long id; 92*4882a593Smuzhiyun unsigned long mask; 93*4882a593Smuzhiyun } XvVideoNotifyRec, *XvVideoNotifyPtr; 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun typedef struct _XvPortNotifyRec { 96*4882a593Smuzhiyun struct _XvPortNotifyRec *next; 97*4882a593Smuzhiyun ClientPtr client; 98*4882a593Smuzhiyun unsigned long id; 99*4882a593Smuzhiyun } XvPortNotifyRec, *XvPortNotifyPtr; 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun typedef struct { 102*4882a593Smuzhiyun int id; 103*4882a593Smuzhiyun ScreenPtr pScreen; 104*4882a593Smuzhiyun char *name; 105*4882a593Smuzhiyun unsigned short width, height; 106*4882a593Smuzhiyun XvRationalRec rate; 107*4882a593Smuzhiyun } XvEncodingRec, *XvEncodingPtr; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun typedef struct _XvAttributeRec { 110*4882a593Smuzhiyun int flags; 111*4882a593Smuzhiyun int min_value; 112*4882a593Smuzhiyun int max_value; 113*4882a593Smuzhiyun char *name; 114*4882a593Smuzhiyun } XvAttributeRec, *XvAttributePtr; 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun typedef struct { 117*4882a593Smuzhiyun int id; 118*4882a593Smuzhiyun int type; 119*4882a593Smuzhiyun int byte_order; 120*4882a593Smuzhiyun char guid[16]; 121*4882a593Smuzhiyun int bits_per_pixel; 122*4882a593Smuzhiyun int format; 123*4882a593Smuzhiyun int num_planes; 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /* for RGB formats only */ 126*4882a593Smuzhiyun int depth; 127*4882a593Smuzhiyun unsigned int red_mask; 128*4882a593Smuzhiyun unsigned int green_mask; 129*4882a593Smuzhiyun unsigned int blue_mask; 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun /* for YUV formats only */ 132*4882a593Smuzhiyun unsigned int y_sample_bits; 133*4882a593Smuzhiyun unsigned int u_sample_bits; 134*4882a593Smuzhiyun unsigned int v_sample_bits; 135*4882a593Smuzhiyun unsigned int horz_y_period; 136*4882a593Smuzhiyun unsigned int horz_u_period; 137*4882a593Smuzhiyun unsigned int horz_v_period; 138*4882a593Smuzhiyun unsigned int vert_y_period; 139*4882a593Smuzhiyun unsigned int vert_u_period; 140*4882a593Smuzhiyun unsigned int vert_v_period; 141*4882a593Smuzhiyun char component_order[32]; 142*4882a593Smuzhiyun int scanline_order; 143*4882a593Smuzhiyun } XvImageRec, *XvImagePtr; 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun typedef struct { 146*4882a593Smuzhiyun unsigned long base_id; 147*4882a593Smuzhiyun unsigned char type; 148*4882a593Smuzhiyun char *name; 149*4882a593Smuzhiyun int nEncodings; 150*4882a593Smuzhiyun XvEncodingPtr pEncodings; 151*4882a593Smuzhiyun int nFormats; 152*4882a593Smuzhiyun XvFormatPtr pFormats; 153*4882a593Smuzhiyun int nAttributes; 154*4882a593Smuzhiyun XvAttributePtr pAttributes; 155*4882a593Smuzhiyun int nImages; 156*4882a593Smuzhiyun XvImagePtr pImages; 157*4882a593Smuzhiyun int nPorts; 158*4882a593Smuzhiyun struct _XvPortRec *pPorts; 159*4882a593Smuzhiyun ScreenPtr pScreen; 160*4882a593Smuzhiyun int (*ddPutVideo) (DrawablePtr, struct _XvPortRec *, GCPtr, 161*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 162*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16); 163*4882a593Smuzhiyun int (*ddPutStill) (DrawablePtr, struct _XvPortRec *, GCPtr, 164*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 165*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16); 166*4882a593Smuzhiyun int (*ddGetVideo) (DrawablePtr, struct _XvPortRec *, GCPtr, 167*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 168*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16); 169*4882a593Smuzhiyun int (*ddGetStill) (DrawablePtr, struct _XvPortRec *, GCPtr, 170*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 171*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16); 172*4882a593Smuzhiyun int (*ddStopVideo) (struct _XvPortRec *, DrawablePtr); 173*4882a593Smuzhiyun int (*ddSetPortAttribute) (struct _XvPortRec *, Atom, INT32); 174*4882a593Smuzhiyun int (*ddGetPortAttribute) (struct _XvPortRec *, Atom, INT32 *); 175*4882a593Smuzhiyun int (*ddQueryBestSize) (struct _XvPortRec *, CARD8, 176*4882a593Smuzhiyun CARD16, CARD16, CARD16, CARD16, 177*4882a593Smuzhiyun unsigned int *, unsigned int *); 178*4882a593Smuzhiyun int (*ddPutImage) (DrawablePtr, struct _XvPortRec *, GCPtr, 179*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 180*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 181*4882a593Smuzhiyun XvImagePtr, unsigned char *, Bool, CARD16, CARD16); 182*4882a593Smuzhiyun int (*ddQueryImageAttributes) (struct _XvPortRec *, XvImagePtr, 183*4882a593Smuzhiyun CARD16 *, CARD16 *, int *, int *); 184*4882a593Smuzhiyun DevUnion devPriv; 185*4882a593Smuzhiyun } XvAdaptorRec, *XvAdaptorPtr; 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun typedef struct _XvPortRec { 188*4882a593Smuzhiyun unsigned long id; 189*4882a593Smuzhiyun XvAdaptorPtr pAdaptor; 190*4882a593Smuzhiyun XvPortNotifyPtr pNotify; 191*4882a593Smuzhiyun DrawablePtr pDraw; 192*4882a593Smuzhiyun ClientPtr client; 193*4882a593Smuzhiyun XvGrabRec grab; 194*4882a593Smuzhiyun TimeStamp time; 195*4882a593Smuzhiyun DevUnion devPriv; 196*4882a593Smuzhiyun } XvPortRec, *XvPortPtr; 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun #define VALIDATE_XV_PORT(portID, pPort, mode)\ 199*4882a593Smuzhiyun {\ 200*4882a593Smuzhiyun int rc = dixLookupResourceByType((void **)&(pPort), portID,\ 201*4882a593Smuzhiyun XvRTPort, client, mode);\ 202*4882a593Smuzhiyun if (rc != Success)\ 203*4882a593Smuzhiyun return rc;\ 204*4882a593Smuzhiyun } 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun typedef struct { 207*4882a593Smuzhiyun int version, revision; 208*4882a593Smuzhiyun int nAdaptors; 209*4882a593Smuzhiyun XvAdaptorPtr pAdaptors; 210*4882a593Smuzhiyun DestroyWindowProcPtr DestroyWindow; 211*4882a593Smuzhiyun DestroyPixmapProcPtr DestroyPixmap; 212*4882a593Smuzhiyun CloseScreenProcPtr CloseScreen; 213*4882a593Smuzhiyun } XvScreenRec, *XvScreenPtr; 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun #define SCREEN_PROLOGUE(pScreen, field) ((pScreen)->field = ((XvScreenPtr) \ 216*4882a593Smuzhiyun dixLookupPrivate(&(pScreen)->devPrivates, XvScreenKey))->field) 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun #define SCREEN_EPILOGUE(pScreen, field, wrapper)\ 219*4882a593Smuzhiyun ((pScreen)->field = wrapper) 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun /* Errors */ 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun #define _XvBadPort (XvBadPort+XvErrorBase) 224*4882a593Smuzhiyun #define _XvBadEncoding (XvBadEncoding+XvErrorBase) 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun extern _X_EXPORT int ProcXvDispatch(ClientPtr); 227*4882a593Smuzhiyun extern _X_EXPORT int SProcXvDispatch(ClientPtr); 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun extern _X_EXPORT int XvScreenInit(ScreenPtr); 230*4882a593Smuzhiyun extern _X_EXPORT DevPrivateKey XvGetScreenKey(void); 231*4882a593Smuzhiyun extern _X_EXPORT unsigned long XvGetRTPort(void); 232*4882a593Smuzhiyun extern _X_EXPORT void XvFreeAdaptor(XvAdaptorPtr pAdaptor); 233*4882a593Smuzhiyun extern void _X_EXPORT XvFillColorKey(DrawablePtr pDraw, CARD32 key, 234*4882a593Smuzhiyun RegionPtr region); 235*4882a593Smuzhiyun extern _X_EXPORT int XvdiSendPortNotify(XvPortPtr, Atom, INT32); 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun extern _X_EXPORT int XvdiPutVideo(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, 238*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 239*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16); 240*4882a593Smuzhiyun extern _X_EXPORT int XvdiPutStill(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, 241*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 242*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16); 243*4882a593Smuzhiyun extern _X_EXPORT int XvdiGetVideo(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, 244*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 245*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16); 246*4882a593Smuzhiyun extern _X_EXPORT int XvdiGetStill(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, 247*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 248*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16); 249*4882a593Smuzhiyun extern _X_EXPORT int XvdiPutImage(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, 250*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 251*4882a593Smuzhiyun INT16, INT16, CARD16, CARD16, 252*4882a593Smuzhiyun XvImagePtr, unsigned char *, Bool, 253*4882a593Smuzhiyun CARD16, CARD16); 254*4882a593Smuzhiyun extern _X_EXPORT int XvdiSelectVideoNotify(ClientPtr, DrawablePtr, BOOL); 255*4882a593Smuzhiyun extern _X_EXPORT int XvdiSelectPortNotify(ClientPtr, XvPortPtr, BOOL); 256*4882a593Smuzhiyun extern _X_EXPORT int XvdiSetPortAttribute(ClientPtr, XvPortPtr, Atom, INT32); 257*4882a593Smuzhiyun extern _X_EXPORT int XvdiGetPortAttribute(ClientPtr, XvPortPtr, Atom, INT32 *); 258*4882a593Smuzhiyun extern _X_EXPORT int XvdiStopVideo(ClientPtr, XvPortPtr, DrawablePtr); 259*4882a593Smuzhiyun extern _X_EXPORT int XvdiMatchPort(XvPortPtr, DrawablePtr); 260*4882a593Smuzhiyun extern _X_EXPORT int XvdiGrabPort(ClientPtr, XvPortPtr, Time, int *); 261*4882a593Smuzhiyun extern _X_EXPORT int XvdiUngrabPort(ClientPtr, XvPortPtr, Time); 262*4882a593Smuzhiyun #endif /* XVDIX_H */ 263