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