370 lines
15 KiB
C
Executable File
370 lines
15 KiB
C
Executable File
/******************************************************************************
|
|
** Copyright (c) 2004, Intel Corporation
|
|
** All rights reserved.
|
|
**
|
|
** Redistribution and use in source and binary forms, with or without
|
|
** modification, are permitted provided that the following conditions are met:
|
|
**
|
|
** - Redistributions of source code must retain the above copyright notice, this
|
|
** list of conditions and the following disclaimer.
|
|
** - Redistributions in binary form must reproduce the above copyright notice,
|
|
** this list of conditions and the following disclaimer in the documentation
|
|
** and/or other materials provided with the distribution.
|
|
** - Neither the name of the Intel Corporation nor the names of its contributors
|
|
** may be used to endorse or promote products derived from this software without
|
|
** specific prior written permission.
|
|
**
|
|
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
** POSSIBILITY OF SUCH DAMAGE.
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
**
|
|
** FILENAME: gxvadd.h
|
|
**
|
|
** DESCRIPTION: GX Video Decode Acceleration and display API
|
|
**
|
|
******************************************************************************/
|
|
|
|
#ifndef _GXVADD_H_
|
|
#define _GXVADD_H_
|
|
|
|
/****************************************************************************/
|
|
/*********** External Interface for the GX video acceleration API **********/
|
|
/****************************************************************************/
|
|
|
|
#ifndef GXAPI
|
|
|
|
#if defined(UNDER_CE)
|
|
#define GXAPI __stdcall
|
|
#else
|
|
#define GXAPI
|
|
#endif
|
|
|
|
#endif
|
|
/************************************************************ Standard Types */
|
|
|
|
typedef enum tag_gx_bool
|
|
{
|
|
GX_FALSE,
|
|
GX_TRUE
|
|
} gx_bool, *gx_pbool;
|
|
|
|
typedef unsigned char gx_uint8;
|
|
typedef unsigned short gx_uint16;
|
|
typedef unsigned long gx_uint32;
|
|
|
|
typedef signed short gx_int16;
|
|
typedef signed long gx_int32;
|
|
|
|
typedef void* gx_pvoid;
|
|
|
|
|
|
typedef gx_uint32 SMSurface;
|
|
|
|
|
|
/*****************************************************************************/
|
|
/***************************** GXVA Hardware commands ***********************/
|
|
/*****************************************************************************/
|
|
|
|
/*********************************************** Motion Compensation Commands */
|
|
|
|
#define GXVA_CMD_MC_OPP_TYPE (0x00000000)
|
|
#define GXVA_CMD_FETCH_PRED_B (0x08000000)
|
|
#define GXVA_CMD_IDCT_MODE (0x10000000)
|
|
#define GXVA_CMD_IMAGE_WRITE (0x18000000)
|
|
#define GXVA_CMD_FETCH_PRED_A (0x80000000)
|
|
|
|
#define GXVA_CMD_MASK (0xf8000000)
|
|
|
|
/* Motion Comp Operation Type (GXVA_CMD_MC_OPP_TYPE) */
|
|
#define GXVA_MC_TYPE_COL_PLANE_MASK (0x00000003)
|
|
#define GXVA_MC_TYPE_COL_PLANE_Y (0x00000000)
|
|
#define GXVA_MC_TYPE_COL_PLANE_U (0x00000001)
|
|
#define GXVA_MC_TYPE_COL_PLANE_V (0x00000002)
|
|
#define GXVA_MC_TYPE_BLK_WIDTH_MASK (0x0000000c)
|
|
#define GXVA_MC_TYPE_BLK_WIDTH_4 (0x00000000)
|
|
#define GXVA_MC_TYPE_BLK_WIDTH_8 (0x00000004)
|
|
#define GXVA_MC_TYPE_BLK_WIDTH_16 (0x00000008)
|
|
#define GXVA_MC_TYPE_BLK_HGHT_MASK (0x00000030)
|
|
#define GXVA_MC_TYPE_BLK_HGHT_4 (0x00000000)
|
|
#define GXVA_MC_TYPE_BLK_HGHT_8 (0x00000010)
|
|
#define GXVA_MC_TYPE_BLK_HGHT_16 (0x00000020)
|
|
#define GXVA_MC_TYPE_INTR_RND_MODE (0x00000040)
|
|
#define GXVA_MC_TYPE_AVR_RND_MODE (0x00000080)
|
|
#define GXVA_MC_TYPE_QUARTR_PIX_ACC (0x00000100)
|
|
#define GXVA_MC_TYPE_WMV_FILTER_MODE (0x00000400)
|
|
|
|
#define GXVA_MC_TYPE_QUARTR_PIX_MODE (0x00000200)
|
|
|
|
/* Fetch Prediction A (GXVA_CMD_FETCH_PRED_A)*/
|
|
#define GXVA_FETCH_A_PREDX_MASK (0x00003fff)
|
|
#define GXVA_FETCH_A_PREDX_SHIFT (0)
|
|
#define GXVA_FETCH_A_PREDY_MASK (0x0fffc000)
|
|
#define GXVA_FETCH_A_PREDY_SHIFT (14)
|
|
#define GXVA_FETCH_A_SRC_SEL_MASK (0x30000000)
|
|
#define GXVA_FETCH_A_SRC_SEL_REF1 (0x00000000)
|
|
#define GXVA_FETCH_A_SRC_SEL_REF2 (0x10000000)
|
|
#define GXVA_FETCH_A_SRC_SEL_OUT (0x20000000)
|
|
#define GXVA_FETCH_A_SRC_SEL_SHIFT (28)
|
|
#define GXVA_FETCH_A_FIRST_PRED (0x40000000)
|
|
|
|
/* Fetch Prediction B (GXVA_CMD_FETCH_PRED_B)*/
|
|
#define GXVA_FETCH_B_IP_FIELD_MODE (0x00000001)
|
|
#define GXVA_FETCH_B_ACC_FIELD_MODE (0x00000002)
|
|
#define GXVA_FETCH_B_ACC_FIELD_SLCT (0x00000004)
|
|
#define GXVA_FETCH_B_ACC_Y_POS_MASK (0x00000018)
|
|
#define GXVA_FETCH_B_ACC_Y_POS_0 (0x00000000)
|
|
#define GXVA_FETCH_B_ACC_Y_POS_4 (0x00000008)
|
|
#define GXVA_FETCH_B_ACC_Y_POS_8 (0x00000010)
|
|
#define GXVA_FETCH_B_ACC_Y_POS_12 (0x00000018)
|
|
#define GXVA_FETCH_B_ACC_X_POS_MASK (0x00000060)
|
|
#define GXVA_FETCH_B_ACC_X_POS_0 (0x00000000)
|
|
#define GXVA_FETCH_B_ACC_X_POS_4 (0x00000020)
|
|
#define GXVA_FETCH_B_ACC_X_POS_8 (0x00000040)
|
|
#define GXVA_FETCH_B_ACC_X_POS_12 (0x00000060)
|
|
|
|
/* IDCT Mode (GXVA_CMD_IDCT_MODE) */
|
|
|
|
#define GXVA_IDCT_MODE_FIELD (0x00000001)
|
|
#define GXVA_IDCT_MODE_INTRA (0x00000002)
|
|
#define GXVA_IDCT_MODE_BLK_SELX_MASK (0x0000000c)
|
|
#define GXVA_IDCT_MODE_BLK_SELX_SHIFT (2)
|
|
#define GXVA_IDCT_MODE_BLK_SELY_MASK (0x00000030)
|
|
#define GXVA_IDCT_MODE_BLK_SELY_SHIFT (4)
|
|
|
|
/* defines for simplicity in 8x8 mode */
|
|
#define GXVA_IDCT_MODE_BLK_TOP_LEFT (0x00000000)
|
|
#define GXVA_IDCT_MODE_BLK_TOP_RGHT (0x00000008)
|
|
#define GXVA_IDCT_MODE_BLK_BOT_LEFT (0x00000020)
|
|
#define GXVA_IDCT_MODE_BLK_BOT_RGHT (0x00000028)
|
|
|
|
#define GXVA_IDCT_MODE_BLK_BOT_FIELD_LEFT (0x00000010)
|
|
#define GXVA_IDCT_MODE_BLK_BOT_FIELD_RGHT (0x00000018)
|
|
|
|
#define GXVA_IDCT_MODE_DCOFFSET (0x00000080)
|
|
#define GXVA_IDCT_BLK_SIZEX_4 (0x00000100)
|
|
#define GXVA_IDCT_BLK_SIZEX_8 (0x00000000)
|
|
#define GXVA_IDCT_BLK_SIZEY_4 (0x00000200)
|
|
#define GXVA_IDCT_BLK_SIZEY_8 (0x00000000)
|
|
|
|
|
|
/* Image Write (GXVA_CMD_IMAGE_WRITE) */
|
|
#define GXVA_IMAGE_WRITE_X_MASK (0x000007ff)
|
|
#define GXVA_IMAGE_WRITE_X_SHIFT (0)
|
|
#define GXVA_IMAGE_WRITE_Y_MASK (0x003ff800)
|
|
#define GXVA_IMAGE_WRITE_Y_SHIFT (11)
|
|
#define GXVA_IMAGE_WRITE_FIELD (0x00400000)
|
|
#define GXVA_IMAGE_WRITE_WIDTH_MASK (0x01800000)
|
|
#define GXVA_IMAGE_WRITE_WIDTH_4 (0x00000000)
|
|
#define GXVA_IMAGE_WRITE_WIDTH_8 (0x00800000)
|
|
#define GXVA_IMAGE_WRITE_WIDTH_16 (0x01000000)
|
|
#define GXVA_IMAGE_WRITE_HGHT_MASK (0x06000000)
|
|
#define GXVA_IMAGE_WRITE_HGHT_4 (0x00000000)
|
|
#define GXVA_IMAGE_WRITE_HGHT_8 (0x02000000)
|
|
#define GXVA_IMAGE_WRITE_HGHT_16 (0x04000000)
|
|
|
|
/* End of Frame (GXVA_CMD_END_OF_FRAME) */
|
|
|
|
|
|
/*****************************************************************************/
|
|
/***************************** GXVA API Defines *****************************/
|
|
/*****************************************************************************/
|
|
|
|
typedef enum {
|
|
|
|
GXVAError_OK = 0,
|
|
GXVAError_GenericError,
|
|
GXVAError_InvalidParameter,
|
|
GXVAError_IncorrectSurfaceFormat,
|
|
GXVAError_OutOfMemory,
|
|
GXVAError_HardwareNotAvailable,
|
|
GXVAError_NotInitialized,
|
|
GXVAError_WriteTimedOut,
|
|
GXVAError_SurfaceUnavailable,
|
|
|
|
} GXVAError;
|
|
|
|
/* IZZ mode */
|
|
typedef enum _GXVA_IZZMODE_
|
|
{
|
|
GXVA_ZigZagScanOrder = 0,
|
|
GXVA_AltVertScanOrder = 1,
|
|
GXVA_AltHorzScanOrder = 2,
|
|
GXVA_RasterScanOrder = 3,
|
|
|
|
} GXVA_IZZMODE;
|
|
|
|
/* Destination formations of the colour space convertor */
|
|
typedef enum
|
|
{
|
|
GXVA_SURF_FORMAT_420,
|
|
GXVA_SURF_FORMAT_422,
|
|
GXVA_SURF_FORMAT_RGB24,
|
|
|
|
} GXVA_SURF_FORMAT;
|
|
|
|
|
|
/*****************************************************************************/
|
|
/********************** GXVA API Function Prototypes ************************/
|
|
/*****************************************************************************/
|
|
#include "gxcomp.h"
|
|
|
|
//Frame Management (Stream level)
|
|
GXVAError GXAPI GXVA_FrameDimensions(gx_uint32 ui32Height, gx_uint32 ui32Width);
|
|
|
|
GXVAError GXAPI GXVA_FrameAllocate(SMSurface *phFrames, gx_uint32 ui32FrameCnt);
|
|
GXVAError GXAPI GXVA_FrameFree(SMSurface *phFrames, gx_uint32 ui32FrameCnt);
|
|
|
|
//Frame Control (Per Frame)
|
|
GXVAError GXAPI GXVA_BeginFrame(SMSurface hOutputSurface, gx_bool bEnableIDCT);
|
|
GXVAError GXAPI GXVA_EndFrame(gx_bool bSyncHardware);
|
|
GXVAError GXAPI GXVA_SetReferenceFrameAddress(gx_uint32 ui32FrameNo, SMSurface hSurface);
|
|
|
|
//Frame Access
|
|
GXVAError GXAPI GXVA_FrameBeginAccess(SMSurface hSurface,
|
|
gx_uint8 **ppuint8FrameAddress,
|
|
gx_uint32 *pui32FrameStride,
|
|
gx_bool bSyncHardware);
|
|
|
|
GXVAError GXAPI GXVA_FrameEndAccess(SMSurface hSurface);
|
|
|
|
//Frame decode
|
|
GXVAError GXAPI GXVA_WriteIZZBlock(gx_int32 *pi32Data, gx_uint32 ui32Count);
|
|
GXVAError GXAPI GXVA_WriteIZZData(gx_int32 i32Coeff, gx_uint32 ui32Index, gx_bool bEOB);
|
|
GXVAError GXAPI GXVA_SetIZZMode(GXVA_IZZMODE eMode);
|
|
|
|
GXVAError GXAPI GXVA_WriteResidualDifferenceData(gx_int16 *pi16Data, gx_uint32 ui32Count);
|
|
GXVAError GXAPI GXVA_WriteMCCmdData(gx_uint32 ui32Data);
|
|
|
|
//Frame format conversion*/
|
|
GXVAError GXAPI GXVA_FCFrameAllocate(SMSurface *phFrame, GXVA_SURF_FORMAT eFormat);
|
|
GXVAError GXAPI GXVA_FrameConvert(SMSurface hDestSurface, SMSurface hSourSurface);
|
|
|
|
// General, defined in all API's
|
|
GXVAError GXAPI GXVA_Initialize();
|
|
GXVAError GXAPI GXVA_Deinitialize();
|
|
|
|
GXVAError GXAPI GXVA_Reset();
|
|
|
|
/******************************************** Internal debug only functions */
|
|
|
|
gx_bool GXAPI GXVA_SimScriptOpen(char *pszFileName, int Wipe);
|
|
|
|
void GXAPI GXVA_SimScriptClose();
|
|
void GXAPI GXVA_SimScriptFlush();
|
|
void GXAPI GXVA_SimScriptLog(char *str,...);
|
|
|
|
void GXAPI GXVA_SetScriptMode(gx_uint32 ui32ScriptMode);
|
|
|
|
void GXAPI GXVA_GetStats(gx_uint32 *pui32IDCTAccessCount,
|
|
gx_uint32 *pui32RegAccessCount,
|
|
gx_uint32 *pui32CmdCount);
|
|
|
|
void GXAPI GXVA_GetSlavePortStats(gx_uint32 ui32SlavePortType,
|
|
gx_uint32 *pui32CmdCount,
|
|
gx_uint32 *pui32CmdPolls,
|
|
gx_uint32 *pui32CmdTrys,
|
|
gx_uint32 *pui32CmdOverflows);
|
|
|
|
/*****************************************************************************/
|
|
/******************************* PDP Overlay Defines *************************/
|
|
/*****************************************************************************/
|
|
|
|
typedef enum {
|
|
|
|
VDISPError_OK = 0,
|
|
VDISPError_GenericError,
|
|
VDISPError_InvalidParameter,
|
|
VDISPError_IncorrectSurfaceFormat,
|
|
VDISPError_HardwareNotAvailable,
|
|
VDISPError_NotInitialised,
|
|
|
|
} VDISPError;
|
|
|
|
typedef struct _VDISP_Tag_CSCCoeffs
|
|
{
|
|
gx_uint16 ui16RyCoeff;
|
|
gx_uint16 ui16RuCoeff;
|
|
gx_uint16 ui16RvCoeff;
|
|
gx_uint16 ui16GyCoeff;
|
|
gx_uint16 ui16GuCoeff;
|
|
gx_uint16 ui16GvCoeff;
|
|
gx_uint16 ui16ByCoeff;
|
|
gx_uint16 ui16BuCoeff;
|
|
gx_uint16 ui16BvCoeff;
|
|
|
|
}VDISP_CSCCoeffs, *PVDISP_CSCCoeffs;
|
|
|
|
|
|
typedef enum _VDISP_DEINTERLACE_
|
|
{
|
|
VDISP_NONE=0,
|
|
VDISP_WEAVE=1,
|
|
VDISP_BOB_ODD,
|
|
VDISP_BOB_EVEN,
|
|
VDISP_BOB_EVEN_NONINTERLEAVED
|
|
|
|
} VDISP_DEINTERLACE,*PVDISP_DEINTERLACE;
|
|
|
|
#define VDISP_OVERLAYATTRIB_VALID_DSTPOSITION 0x0001
|
|
#define VDISP_OVERLAYATTRIB_VALID_SRCPOSITION 0x0002
|
|
#define VDISP_OVERLAYATTRIB_VALID_CKEY 0x0004
|
|
#define VDISP_OVERLAYATTRIB_VALID_VISIBILITY 0x0010
|
|
#define VDISP_OVERLAYATTRIB_VALID_ROTATION 0x0020
|
|
#define VDISP_OVERLAYATTRIB_VALID_ROTATEDEGREE 0x0040
|
|
#define VDISP_OVERLAYATTRIB_VALID_VERIFY 0x8000 // Can we create an overlay?
|
|
|
|
typedef struct _VDISP_OVERLAYATTRIBS_
|
|
{
|
|
gx_uint16 ui16ValidFlags; // Flags to say which members of this structure are valid
|
|
|
|
gx_int16 i16Top; // Signed position of top of overlay (overlay starts on this line)
|
|
gx_int16 i16Left; // Signed position of left of overlay (overlay starts on this column)
|
|
gx_int16 i16Bottom; // Signed position of bottom of overlay (line above this one is last line of overlay)
|
|
gx_int16 i16Right; // Signed position of right overlay (pixel before this one is last line of overlay)
|
|
|
|
gx_uint16 ui16SrcX1; // SrcX1 position of overlay data within buffer
|
|
gx_uint16 ui16SrcY1; // SrcY1 position of overlay data within buffer
|
|
gx_uint16 ui16SrcX2; // SrcX2 position of overlay data within buffer
|
|
gx_uint16 ui16SrcY2; // SrcY2 position of overlay data within buffer
|
|
|
|
gx_bool bCKeyOn; // Turn on/off colorkey;
|
|
gx_uint32 ui32CKeyValue; // ColorKey value
|
|
|
|
gx_bool bOverlayOn; // Turn the overlay on/off
|
|
|
|
gx_bool bDisableRotation; // force video to be displayed unrotated for extra performance
|
|
gx_uint16 ui16RotateDegree; // degree to rotate the surface
|
|
|
|
}VDISP_OVERLAYATTRIBS,*PVDISP_OVERLAYATTRIBS;
|
|
|
|
/*****************************************************************************/
|
|
/**************** PDP Overlay API Function Prototypes ************************/
|
|
/*****************************************************************************/
|
|
|
|
VDISPError GXAPI VDISP_Initialize();
|
|
VDISPError GXAPI VDISP_Deinitialize();
|
|
|
|
VDISPError GXAPI VDISP_OverlaySetAttributes(PVDISP_OVERLAYATTRIBS psOverlayAttributes,
|
|
SMSurface hSurface);
|
|
|
|
VDISPError GXAPI VDISP_OverlayFlipSurface(SMSurface hSurfaceFlipTo, VDISP_DEINTERLACE eDeinterlace);
|
|
|
|
VDISPError GXAPI VDISP_OverlayContrast(gx_uint32 ui32Contrast);
|
|
VDISPError GXAPI VDISP_OverlayGamma(gx_uint32 ui32Gamma);
|
|
VDISPError GXAPI VDISP_OverlayBrightness(gx_uint32 ui32Brightness);
|
|
VDISPError GXAPI VDISP_OverlaySetColorspaceConversion(PVDISP_CSCCoeffs psCoeffs);
|
|
|
|
|
|
#endif /* _GXVADD_H_ */
|