/* * Copyright 2006-2015 The Openchrome Project * [https://www.freedesktop.org/wiki/Openchrome] * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved. * Copyright 2001-2003 S3 Graphics, 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, sub license, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial portions * of the Software. * * 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 NON-INFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ #ifndef _VIA_PRIV_H_ #define _VIA_PRIV_H_ 1 #ifdef HAVE_DRI #include "via_drm.h" #endif #include "exa.h" /* * Alignment macro functions */ #define ALIGN_TO(f, alignment) (((f) + ((alignment)-1)) & ~((alignment)-1)) /* * FOURCC definitions */ #define FOURCC_XVMC (('C' << 24) + ('M' << 16) + ('V' << 8) + 'X') #define FOURCC_RV15 (('5' << 24) + ('1' << 16) + ('V' << 8) + 'R') #define FOURCC_RV16 (('6' << 24) + ('1' << 16) + ('V' << 8) + 'R') #define FOURCC_RV32 (('2' << 24) + ('3' << 16) + ('V' << 8) + 'R') /* * Structures for create surface */ typedef struct _SWDEVICE { unsigned char * lpSWOverlaySurface[2]; /* Max 2 Pointers to SW Overlay Surface*/ unsigned long dwSWPhysicalAddr[2]; /*Max 2 Physical address to SW Overlay Surface */ unsigned long dwSWCbPhysicalAddr[2]; /* Physical address to SW Cb Overlay Surface, for YV12 format use */ unsigned long dwSWCrPhysicalAddr[2]; /* Physical address to SW Cr Overlay Surface, for YV12 format use */ unsigned long dwHQVAddr[3]; /* Physical address to HQV surface -- CLE_C0 */ /*unsigned long dwHQVAddr[2];*/ /*Max 2 Physical address to SW HQV Overlay Surface*/ unsigned long dwWidth; /*SW Source Width, not changed*/ unsigned long dwHeight; /*SW Source Height, not changed*/ unsigned long dwPitch; /*SW frame buffer pitch*/ unsigned long gdwSWSrcWidth; /*SW Source Width, changed if window is out of screen*/ unsigned long gdwSWSrcHeight; /*SW Source Height, changed if window is out of screen*/ unsigned long gdwSWDstWidth; /*SW Destination Width*/ unsigned long gdwSWDstHeight; /*SW Destination Height*/ unsigned long gdwSWDstLeft; /*SW Position : Left*/ unsigned long gdwSWDstTop; /*SW Position : Top*/ unsigned long dwDeinterlaceMode; /*BOB / WEAVE*/ }SWDEVICE; typedef SWDEVICE * LPSWDEVICE; typedef struct _DDUPDATEOVERLAY { CARD32 SrcLeft; CARD32 SrcTop; CARD32 SrcRight; CARD32 SrcBottom; CARD32 DstLeft; CARD32 DstTop; CARD32 DstRight; CARD32 DstBottom; unsigned long dwFlags; /* flags */ unsigned long dwColorSpaceLowValue; } DDUPDATEOVERLAY; typedef DDUPDATEOVERLAY * LPDDUPDATEOVERLAY; /* Definition for dwFlags */ #define DDOVER_KEYDEST 1 #define DDOVER_INTERLEAVED 2 #define DDOVER_BOB 4 #define FOURCC_HQVSW 0x34565148 /*HQV4*/ typedef struct { CARD32 dwWidth; CARD32 dwHeight; CARD32 dwOffset; CARD32 dwUVoffset; CARD32 dwFlipTime; CARD32 dwFlipTag; CARD32 dwStartAddr; CARD32 dwV1OriWidth; CARD32 dwV1OriHeight; CARD32 dwV1OriPitch; CARD32 dwV1SrcWidth; CARD32 dwV1SrcHeight; CARD32 dwV1SrcLeft; CARD32 dwV1SrcRight; CARD32 dwV1SrcTop; CARD32 dwV1SrcBot; CARD32 dwSPWidth; CARD32 dwSPHeight; CARD32 dwSPLeft; CARD32 dwSPRight; CARD32 dwSPTop; CARD32 dwSPBot; CARD32 dwSPOffset; CARD32 dwSPstartAddr; CARD32 dwDisplayPictStruct; CARD32 dwDisplayBuffIndex; /* Display buffer Index. 0 to ( dwBufferNumber -1) */ CARD32 dwFetchAlignment; CARD32 dwSPPitch; unsigned long dwHQVAddr[3]; /* CLE_C0 */ /*unsigned long dwHQVAddr[2];*/ CARD32 dwMPEGDeinterlaceMode; /* default value : VIA_DEINTERLACE_WEAVE */ CARD32 dwMPEGProgressiveMode; /* default value : VIA_PROGRESSIVE */ CARD32 dwHQVheapInfo; /* video memory heap of the HQV buffer */ CARD32 dwVideoControl; /* video control flag */ CARD32 dwminifyH; /* Horizontal minify factor */ CARD32 dwminifyV; /* Vertical minify factor */ CARD32 dwMpegDecoded; } OVERLAYRECORD; #define MEM_BLOCKS 4 typedef struct { unsigned long gdwVideoFlagSW; unsigned long gdwVideoFlagMPEG; unsigned long gdwAlphaEnabled; /* For Alpha blending use*/ struct buffer_object *HQVMem; struct buffer_object *SWfbMem; CARD32 SrcFourCC; DDUPDATEOVERLAY UpdateOverlayBackup; /* For HQVcontrol func use // To save MPEG updateoverlay info.*/ /* device struct */ SWDEVICE SWDevice; OVERLAYRECORD overlayRecordV1; OVERLAYRECORD overlayRecordV3; Bool MPEG_ON; Bool SWVideo_ON; /*To solve the bandwidth issue */ unsigned long gdwUseExtendedFIFO; /* For panning mode use */ int panning_x; int panning_y; int oldPanningX; int oldPanningY; /* Maximum resolution with interpolation */ unsigned long maxWInterp; unsigned long maxHInterp; } swovRec, *swovPtr; #endif /* _VIA_PRIV_H_ */