xref: /OK3568_Linux_fs/external/xserver/Xext/xvdix.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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