xf86xv.h revision 35c4bbdf
1 2/* 3 * Copyright (c) 1998-2003 by The XFree86 Project, Inc. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be included in 13 * all copies or substantial portions of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 19 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 21 * OTHER DEALINGS IN THE SOFTWARE. 22 * 23 * Except as contained in this notice, the name of the copyright holder(s) 24 * and author(s) shall not be used in advertising or otherwise to promote 25 * the sale, use or other dealings in this Software without prior written 26 * authorization from the copyright holder(s) and author(s). 27 */ 28 29#ifndef _XF86XV_H_ 30#define _XF86XV_H_ 31 32#include "xvdix.h" 33#include "xf86str.h" 34 35#define VIDEO_OVERLAID_IMAGES 0x00000004 36#define VIDEO_OVERLAID_STILLS 0x00000008 37/* 38 * Usage of VIDEO_CLIP_TO_VIEWPORT is not recommended. 39 * It can make reput behaviour inconsistent. 40 */ 41#define VIDEO_CLIP_TO_VIEWPORT 0x00000010 42 43typedef XvImageRec XF86ImageRec, *XF86ImagePtr; 44 45typedef struct { 46 ScrnInfoPtr pScrn; 47 int id; 48 unsigned short width, height; 49 int *pitches; /* bytes */ 50 int *offsets; /* in bytes from start of framebuffer */ 51 DevUnion devPrivate; 52} XF86SurfaceRec, *XF86SurfacePtr; 53 54typedef int (*PutVideoFuncPtr) (ScrnInfoPtr pScrn, 55 short vid_x, short vid_y, short drw_x, 56 short drw_y, short vid_w, short vid_h, 57 short drw_w, short drw_h, RegionPtr clipBoxes, 58 void *data, DrawablePtr pDraw); 59typedef int (*PutStillFuncPtr) (ScrnInfoPtr pScrn, short vid_x, short vid_y, 60 short drw_x, short drw_y, short vid_w, 61 short vid_h, short drw_w, short drw_h, 62 RegionPtr clipBoxes, void *data, 63 DrawablePtr pDraw); 64typedef int (*GetVideoFuncPtr) (ScrnInfoPtr pScrn, short vid_x, short vid_y, 65 short drw_x, short drw_y, short vid_w, 66 short vid_h, short drw_w, short drw_h, 67 RegionPtr clipBoxes, void *data, 68 DrawablePtr pDraw); 69typedef int (*GetStillFuncPtr) (ScrnInfoPtr pScrn, short vid_x, short vid_y, 70 short drw_x, short drw_y, short vid_w, 71 short vid_h, short drw_w, short drw_h, 72 RegionPtr clipBoxes, void *data, 73 DrawablePtr pDraw); 74typedef void (*StopVideoFuncPtr) (ScrnInfoPtr pScrn, void *data, Bool Exit); 75typedef int (*SetPortAttributeFuncPtr) (ScrnInfoPtr pScrn, Atom attribute, 76 INT32 value, void *data); 77typedef int (*GetPortAttributeFuncPtr) (ScrnInfoPtr pScrn, Atom attribute, 78 INT32 *value, void *data); 79typedef void (*QueryBestSizeFuncPtr) (ScrnInfoPtr pScrn, Bool motion, 80 short vid_w, short vid_h, short drw_w, 81 short drw_h, unsigned int *p_w, 82 unsigned int *p_h, void *data); 83typedef int (*PutImageFuncPtr) (ScrnInfoPtr pScrn, short src_x, short src_y, 84 short drw_x, short drw_y, short src_w, 85 short src_h, short drw_w, short drw_h, 86 int image, unsigned char *buf, short width, 87 short height, Bool Sync, RegionPtr clipBoxes, 88 void *data, DrawablePtr pDraw); 89typedef int (*ReputImageFuncPtr) (ScrnInfoPtr pScrn, short src_x, short src_y, 90 short drw_x, short drw_y, short src_w, 91 short src_h, short drw_w, short drw_h, 92 RegionPtr clipBoxes, void *data, 93 DrawablePtr pDraw); 94typedef int (*QueryImageAttributesFuncPtr) (ScrnInfoPtr pScrn, int image, 95 unsigned short *width, 96 unsigned short *height, 97 int *pitches, int *offsets); 98 99typedef enum { 100 XV_OFF, 101 XV_PENDING, 102 XV_ON 103} XvStatus; 104 105/*** this is what the driver needs to fill out ***/ 106 107typedef struct { 108 int id; 109 const char *name; 110 unsigned short width, height; 111 XvRationalRec rate; 112} XF86VideoEncodingRec, *XF86VideoEncodingPtr; 113 114typedef struct { 115 char depth; 116 short class; 117} XF86VideoFormatRec, *XF86VideoFormatPtr; 118 119typedef XvAttributeRec XF86AttributeRec, *XF86AttributePtr; 120 121typedef struct { 122 unsigned int type; 123 int flags; 124 const char *name; 125 int nEncodings; 126 XF86VideoEncodingPtr pEncodings; 127 int nFormats; 128 XF86VideoFormatPtr pFormats; 129 int nPorts; 130 DevUnion *pPortPrivates; 131 int nAttributes; 132 XF86AttributePtr pAttributes; 133 int nImages; 134 XF86ImagePtr pImages; 135 PutVideoFuncPtr PutVideo; 136 PutStillFuncPtr PutStill; 137 GetVideoFuncPtr GetVideo; 138 GetStillFuncPtr GetStill; 139 StopVideoFuncPtr StopVideo; 140 SetPortAttributeFuncPtr SetPortAttribute; 141 GetPortAttributeFuncPtr GetPortAttribute; 142 QueryBestSizeFuncPtr QueryBestSize; 143 PutImageFuncPtr PutImage; 144 ReputImageFuncPtr ReputImage; /* image/still */ 145 QueryImageAttributesFuncPtr QueryImageAttributes; 146} XF86VideoAdaptorRec, *XF86VideoAdaptorPtr; 147 148typedef struct { 149 XF86ImagePtr image; 150 int flags; 151 int (*alloc_surface) (ScrnInfoPtr pScrn, 152 int id, 153 unsigned short width, 154 unsigned short height, XF86SurfacePtr surface); 155 int (*free_surface) (XF86SurfacePtr surface); 156 int (*display) (XF86SurfacePtr surface, 157 short vid_x, short vid_y, 158 short drw_x, short drw_y, 159 short vid_w, short vid_h, 160 short drw_w, short drw_h, RegionPtr clipBoxes); 161 int (*stop) (XF86SurfacePtr surface); 162 int (*getAttribute) (ScrnInfoPtr pScrn, Atom attr, INT32 *value); 163 int (*setAttribute) (ScrnInfoPtr pScrn, Atom attr, INT32 value); 164 int max_width; 165 int max_height; 166 int num_attributes; 167 XF86AttributePtr attributes; 168} XF86OffscreenImageRec, *XF86OffscreenImagePtr; 169 170extern _X_EXPORT Bool 171 xf86XVScreenInit(ScreenPtr pScreen, XF86VideoAdaptorPtr * Adaptors, int num); 172 173typedef int (*xf86XVInitGenericAdaptorPtr) (ScrnInfoPtr pScrn, 174 XF86VideoAdaptorPtr ** Adaptors); 175 176extern _X_EXPORT int 177 xf86XVRegisterGenericAdaptorDriver(xf86XVInitGenericAdaptorPtr InitFunc); 178 179extern _X_EXPORT int 180 xf86XVListGenericAdaptors(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr ** Adaptors); 181 182extern _X_EXPORT Bool 183 184xf86XVRegisterOffscreenImages(ScreenPtr pScreen, 185 XF86OffscreenImagePtr images, int num); 186 187extern _X_EXPORT XF86OffscreenImagePtr 188xf86XVQueryOffscreenImages(ScreenPtr pScreen, int *num); 189 190extern _X_EXPORT XF86VideoAdaptorPtr xf86XVAllocateVideoAdaptorRec(ScrnInfoPtr 191 pScrn); 192 193extern _X_EXPORT void xf86XVFreeVideoAdaptorRec(XF86VideoAdaptorPtr ptr); 194 195extern _X_EXPORT void 196 xf86XVFillKeyHelper(ScreenPtr pScreen, CARD32 key, RegionPtr clipboxes); 197 198extern _X_EXPORT void 199 200xf86XVFillKeyHelperDrawable(DrawablePtr pDraw, CARD32 key, RegionPtr clipboxes); 201 202extern _X_EXPORT void 203 204xf86XVFillKeyHelperPort(DrawablePtr pDraw, void *data, CARD32 key, 205 RegionPtr clipboxes, Bool fillEverything); 206 207extern _X_EXPORT Bool 208 209xf86XVClipVideoHelper(BoxPtr dst, 210 INT32 *xa, 211 INT32 *xb, 212 INT32 *ya, 213 INT32 *yb, RegionPtr reg, INT32 width, INT32 height); 214 215extern _X_EXPORT void 216 217xf86XVCopyYUV12ToPacked(const void *srcy, 218 const void *srcv, 219 const void *srcu, 220 void *dst, 221 int srcPitchy, 222 int srcPitchuv, int dstPitch, int h, int w); 223 224extern _X_EXPORT void 225 226xf86XVCopyPacked(const void *src, 227 void *dst, int srcPitch, int dstPitch, int h, int w); 228 229#endif /* _XF86XV_H_ */ 230