xvdix.h revision 4642e01f
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 58extern unsigned long XvExtensionGeneration; 59extern unsigned long XvScreenGeneration; 60extern unsigned long XvResourceGeneration; 61 62extern int XvReqCode; 63extern int XvEventBase; 64extern int XvErrorBase; 65 66extern unsigned long XvRTPort; 67extern unsigned long XvRTEncoding; 68extern unsigned long XvRTGrab; 69extern unsigned long XvRTVideoNotify; 70extern unsigned long XvRTVideoNotifyList; 71extern unsigned long XvRTPortNotify; 72 73typedef struct { 74 int numerator; 75 int denominator; 76} XvRationalRec, *XvRationalPtr; 77 78typedef struct { 79 char depth; 80 unsigned long visual; 81} XvFormatRec, *XvFormatPtr; 82 83typedef struct { 84 unsigned long id; 85 ClientPtr client; 86} XvGrabRec, *XvGrabPtr; 87 88typedef struct _XvVideoNotifyRec { 89 struct _XvVideoNotifyRec *next; 90 ClientPtr client; 91 unsigned long id; 92 unsigned long mask; 93} XvVideoNotifyRec, *XvVideoNotifyPtr; 94 95typedef struct _XvPortNotifyRec { 96 struct _XvPortNotifyRec *next; 97 ClientPtr client; 98 unsigned long id; 99} XvPortNotifyRec, *XvPortNotifyPtr; 100 101typedef struct { 102 int id; 103 ScreenPtr pScreen; 104 char *name; 105 unsigned short width, height; 106 XvRationalRec rate; 107} XvEncodingRec, *XvEncodingPtr; 108 109typedef struct _XvAttributeRec { 110 int flags; 111 int min_value; 112 int max_value; 113 char *name; 114} XvAttributeRec, *XvAttributePtr; 115 116typedef 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 145typedef 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 (* ddAllocatePort)(unsigned long, struct _XvPortRec*, 161 struct _XvPortRec**); 162 int (* ddFreePort)(struct _XvPortRec*); 163 int (* ddPutVideo)(ClientPtr, DrawablePtr,struct _XvPortRec*, GCPtr, 164 INT16, INT16, CARD16, CARD16, 165 INT16, INT16, CARD16, CARD16); 166 int (* ddPutStill)(ClientPtr, DrawablePtr,struct _XvPortRec*, GCPtr, 167 INT16, INT16, CARD16, CARD16, 168 INT16, INT16, CARD16, CARD16); 169 int (* ddGetVideo)(ClientPtr, DrawablePtr,struct _XvPortRec*, GCPtr, 170 INT16, INT16, CARD16, CARD16, 171 INT16, INT16, CARD16, CARD16); 172 int (* ddGetStill)(ClientPtr, DrawablePtr,struct _XvPortRec*, GCPtr, 173 INT16, INT16, CARD16, CARD16, 174 INT16, INT16, CARD16, CARD16); 175 int (* ddStopVideo)(ClientPtr, struct _XvPortRec*, DrawablePtr); 176 int (* ddSetPortAttribute)(ClientPtr, struct _XvPortRec*, Atom, INT32); 177 int (* ddGetPortAttribute)(ClientPtr, struct _XvPortRec*, Atom, INT32*); 178 int (* ddQueryBestSize)(ClientPtr, struct _XvPortRec*, CARD8, 179 CARD16, CARD16,CARD16, CARD16, 180 unsigned int*, unsigned int*); 181 int (* ddPutImage)(ClientPtr, DrawablePtr, struct _XvPortRec*, GCPtr, 182 INT16, INT16, CARD16, CARD16, 183 INT16, INT16, CARD16, CARD16, 184 XvImagePtr, unsigned char*, Bool, 185 CARD16, CARD16); 186 int (* ddQueryImageAttributes)(ClientPtr, struct _XvPortRec*, XvImagePtr, 187 CARD16*, CARD16*, int*, int*); 188 DevUnion devPriv; 189} XvAdaptorRec, *XvAdaptorPtr; 190 191typedef struct _XvPortRec { 192 unsigned long id; 193 XvAdaptorPtr pAdaptor; 194 XvPortNotifyPtr pNotify; 195 DrawablePtr pDraw; 196 ClientPtr client; 197 XvGrabRec grab; 198 TimeStamp time; 199 DevUnion devPriv; 200} XvPortRec, *XvPortPtr; 201 202#define LOOKUP_PORT(_id, client)\ 203 ((XvPortPtr)LookupIDByType(_id, XvRTPort)) 204 205#define LOOKUP_ENCODING(_id, client)\ 206 ((XvEncodingPtr)LookupIDByType(_id, XvRTEncoding)) 207 208#define LOOKUP_VIDEONOTIFY_LIST(_id, client)\ 209 ((XvVideoNotifyPtr)LookupIDByType(_id, XvRTVideoNotifyList)) 210 211#define LOOKUP_PORTNOTIFY_LIST(_id, client)\ 212 ((XvPortNotifyPtr)LookupIDByType(_id, XvRTPortNotifyList)) 213 214typedef struct { 215 int version, revision; 216 int nAdaptors; 217 XvAdaptorPtr pAdaptors; 218 DestroyWindowProcPtr DestroyWindow; 219 DestroyPixmapProcPtr DestroyPixmap; 220 CloseScreenProcPtr CloseScreen; 221 Bool (* ddCloseScreen)(int, ScreenPtr); 222 int (* ddQueryAdaptors)(ScreenPtr, XvAdaptorPtr*, int*); 223 DevUnion devPriv; 224} XvScreenRec, *XvScreenPtr; 225 226#define SCREEN_PROLOGUE(pScreen, field) ((pScreen)->field = ((XvScreenPtr) \ 227 dixLookupPrivate(&(pScreen)->devPrivates, XvScreenKey))->field) 228 229#define SCREEN_EPILOGUE(pScreen, field, wrapper)\ 230 ((pScreen)->field = wrapper) 231 232/* Errors */ 233 234#define _XvBadPort (XvBadPort+XvErrorBase) 235#define _XvBadEncoding (XvBadEncoding+XvErrorBase) 236 237extern int ProcXvDispatch(ClientPtr); 238extern int SProcXvDispatch(ClientPtr); 239 240extern void XvExtensionInit(void); 241extern int XvScreenInit(ScreenPtr); 242extern DevPrivateKey XvGetScreenKey(void); 243extern unsigned long XvGetRTPort(void); 244extern int XvdiSendPortNotify(XvPortPtr, Atom, INT32); 245extern int XvdiVideoStopped(XvPortPtr, int); 246 247extern int XvdiPutVideo(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, 248 INT16, INT16, CARD16, CARD16, 249 INT16, INT16, CARD16, CARD16); 250extern int XvdiPutStill(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, 251 INT16, INT16, CARD16, CARD16, 252 INT16, INT16, CARD16, CARD16); 253extern int XvdiGetVideo(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, 254 INT16, INT16, CARD16, CARD16, 255 INT16, INT16, CARD16, CARD16); 256extern int XvdiGetStill(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, 257 INT16, INT16, CARD16, CARD16, 258 INT16, INT16, CARD16, CARD16); 259extern int XvdiPutImage(ClientPtr, DrawablePtr, XvPortPtr, GCPtr, 260 INT16, INT16, CARD16, CARD16, 261 INT16, INT16, CARD16, CARD16, 262 XvImagePtr, unsigned char*, Bool, 263 CARD16, CARD16); 264extern int XvdiSelectVideoNotify(ClientPtr, DrawablePtr, BOOL); 265extern int XvdiSelectPortNotify(ClientPtr, XvPortPtr, BOOL); 266extern int XvdiSetPortAttribute(ClientPtr, XvPortPtr, Atom, INT32); 267extern int XvdiGetPortAttribute(ClientPtr, XvPortPtr, Atom, INT32*); 268extern int XvdiStopVideo(ClientPtr, XvPortPtr, DrawablePtr); 269extern int XvdiPreemptVideo(ClientPtr, XvPortPtr, DrawablePtr); 270extern int XvdiMatchPort(XvPortPtr, DrawablePtr); 271extern int XvdiGrabPort(ClientPtr, XvPortPtr, Time, int *); 272extern int XvdiUngrabPort( ClientPtr, XvPortPtr, Time); 273 274 275#if !defined(UNIXCPP) 276 277#define XVCALL(name) Xv##name 278 279#else 280 281#define XVCALL(name) Xv/**/name 282 283#endif 284 285 286#endif /* XVDIX_H */ 287 288