317 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			317 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			C
		
	
	
	
| /* 
 | |
| 
 | |
|    XFree86 Xv DDX written by Mark Vojkovich (markv@valinux.com) 
 | |
|    Adapted for KDrive by Pontus Lidman <pontus.lidman@nokia.com>
 | |
| 
 | |
|    Copyright (C) 2000, 2001 - Nokia Home Communications
 | |
|    Copyright (C) 1998, 1999 - The XFree86 Project Inc.
 | |
| 
 | |
| All rights reserved.
 | |
| 
 | |
| Permission is hereby granted, free of charge, to any person obtaining
 | |
| a copy of this software and associated documentation files (the
 | |
| "Software"), to deal in the Software without restriction, including
 | |
| without limitation the rights to use, copy, modify, merge, publish,
 | |
| distribute, and/or sell copies of the Software, and to permit persons
 | |
| to whom the Software is furnished to do so, provided that the above
 | |
| copyright notice(s) and this permission notice appear in all copies of
 | |
| the Software and that both the above copyright notice(s) and this
 | |
| permission notice appear in supporting documentation.
 | |
| 
 | |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 | |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
 | |
| OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 | |
| HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
 | |
| SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
 | |
| RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
 | |
| CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 | |
| CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | |
| 
 | |
| Except as contained in this notice, the name of a copyright holder
 | |
| shall not be used in advertising or otherwise to promote the sale, use
 | |
| or other dealings in this Software without prior written authorization
 | |
| of the copyright holder.
 | |
| 
 | |
| */
 | |
| 
 | |
| #ifndef _XVDIX_H_
 | |
| #define _XVDIX_H_
 | |
| 
 | |
| #include "scrnintstr.h"
 | |
| #include "regionstr.h"
 | |
| #include "windowstr.h"
 | |
| #include "pixmapstr.h"
 | |
| #include "mivalidate.h"
 | |
| #include "validate.h"
 | |
| #include "resource.h"
 | |
| #include "gcstruct.h"
 | |
| #include "dixstruct.h"
 | |
| 
 | |
| #include "../../Xext/xvdix.h"
 | |
| 
 | |
| #define VIDEO_NO_CLIPPING			0x00000001
 | |
| #define VIDEO_INVERT_CLIPLIST			0x00000002
 | |
| #define VIDEO_OVERLAID_IMAGES			0x00000004
 | |
| #define VIDEO_OVERLAID_STILLS			0x00000008
 | |
| #define VIDEO_CLIP_TO_VIEWPORT			0x00000010
 | |
| 
 | |
| typedef struct {
 | |
|   int id;
 | |
|   int type;
 | |
|   int byte_order;
 | |
|   unsigned char guid[16];               
 | |
|   int bits_per_pixel;
 | |
|   int format;
 | |
|   int num_planes;
 | |
| 
 | |
|   /* for RGB formats only */
 | |
|   int depth;
 | |
|   unsigned int red_mask;       
 | |
|   unsigned int green_mask;   
 | |
|   unsigned int blue_mask;   
 | |
| 
 | |
|   /* for YUV formats only */
 | |
|   unsigned int y_sample_bits;
 | |
|   unsigned int u_sample_bits;
 | |
|   unsigned int v_sample_bits;   
 | |
|   unsigned int horz_y_period;
 | |
|   unsigned int horz_u_period;
 | |
|   unsigned int horz_v_period;
 | |
|   unsigned int vert_y_period;
 | |
|   unsigned int vert_u_period;
 | |
|   unsigned int vert_v_period;
 | |
|   char component_order[32];
 | |
|   int scanline_order;
 | |
| } KdImageRec, *KdImagePtr; 
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
|   KdScreenInfo * screen;
 | |
|   int id;
 | |
|   unsigned short width, height;
 | |
|   int *pitches; /* bytes */
 | |
|   int *offsets; /* in bytes from start of framebuffer */
 | |
|   DevUnion devPrivate;  
 | |
| } KdSurfaceRec, *KdSurfacePtr;
 | |
| 
 | |
| 
 | |
| typedef int (* PutVideoFuncPtr)( KdScreenInfo * screen, DrawablePtr pDraw,
 | |
| 	short vid_x, short vid_y, short drw_x, short drw_y,
 | |
| 	short vid_w, short vid_h, short drw_w, short drw_h,
 | |
| 	RegionPtr clipBoxes, pointer data );
 | |
| typedef int (* PutStillFuncPtr)( KdScreenInfo * screen,  DrawablePtr pDraw,
 | |
| 	short vid_x, short vid_y, short drw_x, short drw_y,
 | |
| 	short vid_w, short vid_h, short drw_w, short drw_h,
 | |
| 	RegionPtr clipBoxes, pointer data );
 | |
| typedef int (* GetVideoFuncPtr)( KdScreenInfo * screen,  DrawablePtr pDraw,
 | |
| 	short vid_x, short vid_y, short drw_x, short drw_y,
 | |
| 	short vid_w, short vid_h, short drw_w, short drw_h,
 | |
| 	RegionPtr clipBoxes, pointer data );
 | |
| typedef int (* GetStillFuncPtr)( KdScreenInfo * screen,  DrawablePtr pDraw,
 | |
| 	short vid_x, short vid_y, short drw_x, short drw_y,
 | |
| 	short vid_w, short vid_h, short drw_w, short drw_h,
 | |
| 	RegionPtr clipBoxes, pointer data );
 | |
| typedef void (* StopVideoFuncPtr)(KdScreenInfo * screen, pointer data, Bool Exit);
 | |
| typedef int (* SetPortAttributeFuncPtr)(KdScreenInfo * screen, Atom attribute,
 | |
| 	int value, pointer data);
 | |
| typedef int (* GetPortAttributeFuncPtr)(KdScreenInfo * screen, Atom attribute,
 | |
| 	int *value, pointer data);
 | |
| typedef void (* QueryBestSizeFuncPtr)(KdScreenInfo * screen, Bool motion,
 | |
| 	short vid_w, short vid_h, short drw_w, short drw_h, 
 | |
| 	unsigned int *p_w, unsigned int *p_h, pointer data);
 | |
| typedef int (* PutImageFuncPtr)( KdScreenInfo * screen,  DrawablePtr pDraw,
 | |
| 	short src_x, short src_y, short drw_x, short drw_y,
 | |
| 	short src_w, short src_h, short drw_w, short drw_h,
 | |
| 	int image, unsigned char* buf, short width, short height, Bool Sync,
 | |
| 	RegionPtr clipBoxes, pointer data );
 | |
| typedef int (* ReputImageFuncPtr)( KdScreenInfo * screen, DrawablePtr pDraw,
 | |
| 				  short drw_x, short drw_y,
 | |
| 				  RegionPtr clipBoxes, pointer data );
 | |
| typedef int (*QueryImageAttributesFuncPtr)(KdScreenInfo * screen, 
 | |
| 	int image, unsigned short *width, unsigned short *height, 
 | |
| 	int *pitches, int *offsets);
 | |
| 
 | |
| typedef enum {
 | |
|     XV_OFF,
 | |
|     XV_PENDING,
 | |
|     XV_ON
 | |
| } XvStatus;
 | |
| 
 | |
| /*** this is what the driver needs to fill out ***/
 | |
| 
 | |
| typedef struct {
 | |
|   int id;
 | |
|   char *name;
 | |
|   unsigned short width, height;
 | |
|   XvRationalRec rate;
 | |
| } KdVideoEncodingRec, *KdVideoEncodingPtr;
 | |
| 
 | |
| typedef struct {
 | |
|   char 	depth;  
 | |
|   short class;
 | |
| } KdVideoFormatRec, *KdVideoFormatPtr;
 | |
| 
 | |
| typedef struct {
 | |
|   int   flags;
 | |
|   int   min_value;
 | |
|   int   max_value;
 | |
|   char  *name;
 | |
| } KdAttributeRec, *KdAttributePtr;
 | |
| 
 | |
| typedef struct {
 | |
|   unsigned int type; 
 | |
|   int flags;
 | |
|   char *name;
 | |
|   int nEncodings;
 | |
|   KdVideoEncodingPtr pEncodings;  
 | |
|   int nFormats;
 | |
|   KdVideoFormatPtr pFormats;  
 | |
|   int nPorts;
 | |
|   DevUnion *pPortPrivates;
 | |
|   int nAttributes;
 | |
|   KdAttributePtr pAttributes;
 | |
|   int nImages;
 | |
|   KdImagePtr pImages;
 | |
|   PutVideoFuncPtr PutVideo;
 | |
|   PutStillFuncPtr PutStill;
 | |
|   GetVideoFuncPtr GetVideo;
 | |
|   GetStillFuncPtr GetStill;
 | |
|   StopVideoFuncPtr StopVideo;
 | |
|   SetPortAttributeFuncPtr SetPortAttribute;
 | |
|   GetPortAttributeFuncPtr GetPortAttribute;
 | |
|   QueryBestSizeFuncPtr QueryBestSize;
 | |
|   PutImageFuncPtr PutImage;
 | |
|   ReputImageFuncPtr ReputImage;
 | |
|   QueryImageAttributesFuncPtr QueryImageAttributes;
 | |
| } KdVideoAdaptorRec, *KdVideoAdaptorPtr;
 | |
| 
 | |
| typedef struct {
 | |
|   KdImagePtr image;
 | |
|   int flags;
 | |
|   int (*alloc_surface)(KdScreenInfo * screen,
 | |
| 		  int id,
 | |
| 		  unsigned short width, 	
 | |
| 		  unsigned short height,
 | |
| 		  KdSurfacePtr surface);
 | |
|   int (*free_surface)(KdSurfacePtr surface);
 | |
|   int (*display) (KdSurfacePtr surface,
 | |
| 		  short vid_x, short vid_y, 
 | |
| 		  short drw_x, short drw_y,
 | |
| 		  short vid_w, short vid_h, 
 | |
| 		  short drw_w, short drw_h,
 | |
| 		  RegionPtr clipBoxes);
 | |
|   int (*stop)    (KdSurfacePtr surface);
 | |
|   int (*getAttribute) (KdScreenInfo * screen, Atom attr, INT32 *value);
 | |
|   int (*setAttribute) (KdScreenInfo * screen, Atom attr, INT32 value);
 | |
|   int max_width;
 | |
|   int max_height;
 | |
|   int num_attributes;
 | |
|   KdAttributePtr attributes;
 | |
| } KdOffscreenImageRec, *KdOffscreenImagePtr;
 | |
| 
 | |
| Bool
 | |
| KdXVScreenInit(
 | |
|    ScreenPtr pScreen, 
 | |
|    KdVideoAdaptorPtr 	*Adaptors,
 | |
|    int num
 | |
| );
 | |
| 
 | |
| typedef int (* KdXVInitGenericAdaptorPtr)(KdScreenInfo * screen,
 | |
| 	KdVideoAdaptorPtr **Adaptors);
 | |
| 
 | |
| int
 | |
| KdXVRegisterGenericAdaptorDriver(
 | |
|     KdXVInitGenericAdaptorPtr InitFunc
 | |
| );
 | |
| 
 | |
| int
 | |
| KdXVListGenericAdaptors(
 | |
|     KdScreenInfo *          screen,
 | |
|     KdVideoAdaptorPtr  **Adaptors
 | |
| );
 | |
| 
 | |
| Bool 
 | |
| KdXVRegisterOffscreenImages(
 | |
|    ScreenPtr pScreen,
 | |
|    KdOffscreenImagePtr images,
 | |
|    int num
 | |
| );
 | |
| 
 | |
| KdOffscreenImagePtr
 | |
| KdXVQueryOffscreenImages(
 | |
|    ScreenPtr pScreen,
 | |
|    int *num
 | |
| );
 | |
| 
 | |
| void
 | |
| KdXVCopyPackedData(KdScreenInfo *screen, CARD8 *src, CARD8 *dst, int randr,
 | |
|    int srcPitch, int dstPitch, int srcW, int srcH, int top, int left,
 | |
|    int h, int w);
 | |
| 
 | |
| void
 | |
| KdXVCopyPlanarData(KdScreenInfo *screen, CARD8 *src, CARD8 *dst, int randr,
 | |
|    int srcPitch, int srcPitch2, int dstPitch, int srcW, int srcH, int height,
 | |
|    int top, int left, int h, int w, int id);
 | |
| 
 | |
| void
 | |
| KXVPaintRegion (DrawablePtr pDraw, RegionPtr pRgn, Pixel fg);
 | |
| 
 | |
| KdVideoAdaptorPtr KdXVAllocateVideoAdaptorRec(KdScreenInfo * screen);
 | |
| 
 | |
| void KdXVFreeVideoAdaptorRec(KdVideoAdaptorPtr ptr);
 | |
| 
 | |
| /* Must be called from KdCardInfo functions, can be called without Xv enabled */
 | |
| Bool KdXVEnable(ScreenPtr);
 | |
| void KdXVDisable(ScreenPtr);
 | |
| 
 | |
| /*** These are DDX layer privates ***/
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
|    CreateWindowProcPtr		CreateWindow;
 | |
|    DestroyWindowProcPtr		DestroyWindow;
 | |
|    ClipNotifyProcPtr		ClipNotify;
 | |
|    WindowExposuresProcPtr	WindowExposures;
 | |
| } KdXVScreenRec, *KdXVScreenPtr;
 | |
| 
 | |
| typedef struct {
 | |
|   int flags;  
 | |
|   PutVideoFuncPtr PutVideo;
 | |
|   PutStillFuncPtr PutStill;
 | |
|   GetVideoFuncPtr GetVideo;
 | |
|   GetStillFuncPtr GetStill;
 | |
|   StopVideoFuncPtr StopVideo;
 | |
|   SetPortAttributeFuncPtr SetPortAttribute;
 | |
|   GetPortAttributeFuncPtr GetPortAttribute;
 | |
|   QueryBestSizeFuncPtr QueryBestSize;
 | |
|   PutImageFuncPtr PutImage;
 | |
|   ReputImageFuncPtr ReputImage;
 | |
|   QueryImageAttributesFuncPtr QueryImageAttributes;
 | |
| } XvAdaptorRecPrivate, *XvAdaptorRecPrivatePtr;
 | |
| 
 | |
| typedef struct {
 | |
|    KdScreenInfo * screen;
 | |
|    DrawablePtr pDraw;
 | |
|    unsigned char type;
 | |
|    unsigned int subWindowMode;
 | |
|    DDXPointRec clipOrg;
 | |
|    RegionPtr clientClip;
 | |
|    RegionPtr pCompositeClip;
 | |
|    Bool FreeCompositeClip;
 | |
|    XvAdaptorRecPrivatePtr AdaptorRec;
 | |
|    XvStatus isOn;
 | |
|    Bool moved;
 | |
|    int vid_x, vid_y, vid_w, vid_h;
 | |
|    int drw_x, drw_y, drw_w, drw_h;
 | |
|    DevUnion DevPriv;
 | |
| } XvPortRecPrivate, *XvPortRecPrivatePtr;
 | |
| 
 | |
| typedef struct _KdXVWindowRec{
 | |
|    XvPortRecPrivatePtr PortRec;
 | |
|    struct _KdXVWindowRec *next;
 | |
| } KdXVWindowRec, *KdXVWindowPtr;
 | |
| 
 | |
| #endif  /* _XVDIX_H_ */
 | |
|  
 |