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