nt9856x/code/application/source/cardv/SrcCode/Gx/include/GxDisplay.h
2023-03-28 15:07:53 +08:00

756 lines
27 KiB
C
Executable File

/**
Display control lib.
Display control of buffer, blending & scaling window.
@file GxDisplay.h
@note Nothing
DISPLAY : Display device, contain many display layers
LAYER : Display layer, display a DC to specified window on screen
DC : source buffer for display
Copyright Novatek Microelectronics Corp. 2012. All rights reserved.
*/
#ifndef _GX_DISPLAY_H_
#define _GX_DISPLAY_H_
#include "GxCommon.h"
#include "GxGfx/GxGfx.h"
#ifdef __cplusplus
extern "C" {
#endif
//--------------------------------------------------------------------------------------
// device
//--------------------------------------------------------------------------------------
/**
Set display enable (Low level).
Set display enable.
@note This is an low level function for control display in eary boot flow
@param[in] LayerID Layer id.(ex: LAYER_XXX).
@param[in] bEnable State (TRUE for enable, FALSE for disable).
*/
extern void Display_SetEnable(UINT8 LayerID, BOOL bEnable);
/**
Set display buffer (Low level).
Set display buffer.
@note This is an low level function for control display in eary boot flow
@param[in] LayerID Layer id. (ex: LAYER_XXX).
@param[in] w Width of buffer (pixels).
@param[in] h Height of buffer (pixels).
@param[in] off Line offset of buffer (bytes)(y plane).
@param[in] fmt Format of buffer (ex: PXLFMT_XXX).
@param[in] uiBufY Start address of y plane.
@param[in] uiBufCb Start address of cb plane. (or UV-Packed plane)
@param[in] uiBufCr Start address of cr plane.
*/
extern void Display_SetBuffer(UINT8 LayerID, UINT32 w, UINT32 h, UINT32 off, UINT32 fmt,
UINT32 uiBufY, UINT32 uiBufCb, UINT32 uiBufCr);
/**
Set display window (Low level).
Set display window.
@note This is an low level function for control display in eary boot flow
@param[in] LayerID Layer id.(ex: LAYER_XXX).
@param[in] x Left of window (base on device physical coordinate)
@param[in] y Top of window (base on device physical coordinate)
@param[in] w Width of window (base on device physical coordinate)
@param[in] h Height of window (base on device physical coordinate)
*/
extern void Display_SetWindow(UINT8 LayerID, int x, int y, int w, int h);
//--------------------------------------------------------------------------------------
// type - display
//--------------------------------------------------------------------------------------
/**
Layer initialize struct.
Layer initialize struct.
@note For LayerInit().
*/
typedef struct _LAYER_INIT {
UINT32 uiFlag; ///< Reserved
//-input buffer
UINT16 uiType; ///< buffer type
UINT16 uiPxlfmt; ///< buffer format
UINT32 uiWidth; ///< buffer width (pixels)
UINT32 uiHeight; ///< buffer height (pixels)
UINT32 uiBufSize; ///< buffer memory size
UINT32 pBufAddr[3]; ///< buffer memory address of plane 0,1,2
UINT16 uiSwapEffect; ///< buffer swapping method (ex: 1 = DISCARD, 2 = COPY, 3 = FLIP)
UINT16 uiBufCount; ///< total buffer count (0 = one buffer, 1 = double buffer, 2 = triple buffer)
//-output window
IRECT win; ///< destination scaling window
UINT32 uiWinAttr; ///< destination mirror flag (0x01 = MIRROR X, 0x02 = MIRROR Y)
} LAYER_INIT, *PLAYER_INIT;
typedef struct _LAYER_BUFMAN {
void *(*get)(UINT32 buffer_id);
UINT32(*calcsize)(LAYER_INIT *pLayerInit);
void (*attach)(void *buf, LAYER_INIT *pLayerInit, UINT32 buffer_id);
void (*detach)(void *buf);
void (*copy)(void *buf1, void *buf2, UINT32 uiRop, UINT32 uiParam);
void (*clear)(void *buf);
}
LAYER_BUFMAN;
//--------------------------------------------------------------------------------------
// enum - display
//--------------------------------------------------------------------------------------
/**
@name Get Device id and layer id from parameteres
*/
//@{
#define _DD(id) (((id)>>4)&0x0f)
#define _DL(id) ((id)&0x0f)
#define _LayerID(dev,lyr) ((((dev)&0x0f)<<4)|((lyr)&0x0f))
//@}
/**
@name DISPLAY device id
*/
//@{
#ifndef DOUT1
#define DOUT1 0x00 ///< 1st device
#define DOUT2 0x10 ///< 2nd device
#define DOUT_MASK 0xf0 ///< output device mask
#endif
//@}
#ifndef LAYER_NUM
/**
@name DISPLAY layer id
*/
//@{
#define LAYER_OSD1 0x00 ///< on screen display 1
#define LAYER_OSD2 0x01 ///< on screen display 2
#define LAYER_VDO1 0x02 ///< video 1
#define LAYER_VDO2 0x03 ///< video 2
#define LAYER_OUTPUT 0x04 ///< output = mix ( osd1, osd2, vdo1, vdo2 )
#define LAYER_FACE 0x05 ///< face tracing frame
#define LAYER_ALL 0x0F ///< all layers
#define LAYER_NUM 4 ///< total input layer
#define LAYER_MAX (LAYER_NUM+1)
//@}
#endif
/**
@name DISPLAY layer state of LAYER_OSD1
LAYER_OSD2
LAYER_VDO1
LAYER_VDO2
*/
//@{
#define LAYER_STATE_FLAG 0x00 ///< bit0:valid, bit1:draw (RO)
//-input buffer
#define LAYER_STATE_TYPEFMT 0x01 ///< uiType and uiPxlfmt (RO) (init)
#define LAYER_STATE_BUFWIDTH 0x02 ///< uiWidth (RO) (init)
#define LAYER_STATE_BUFHEIGHT 0x03 ///< uiHeight (RO) (init)
#define LAYER_STATE_BUFSIZE 0x04 ///< uiBufSize (RO) (init)
#define LAYER_STATE_BUFADDR0 0x05 ///< pBufAddr[0] (RO) (init)
#define LAYER_STATE_BUFADDR1 0x06 ///< pBufAddr[1] (RO) (init)
#define LAYER_STATE_BUFADDR2 0x07 ///< pBufAddr[2] (RO) (init)
#define LAYER_STATE_BUFATTR 0x08 ///< uiBufCount and uiSwapEffect (RO) (init)
//-output window
#define LAYER_STATE_WINX 0x09 ///< window x (R/W) (init)
#define LAYER_STATE_WINY 0x0A ///< window y (R/W) (init)
#define LAYER_STATE_WINW 0x0B ///< window w (R/W) (init)
#define LAYER_STATE_WINH 0x0C ///< window h (R/W) (init)
#define LAYER_STATE_WINATTR 0x0D ///< uiMirrorEffect (R/W) (init)
//-status
#define LAYER_STATE_ENABLE 0x0E ///< enable/disable
#define LAYER_STATE_INFO 0x0F ///< current show/current draw/palette color count (RO)
#define LAYER_STATE_NUM 0x10
//@}
/**
@name DISPLAY layer state of LAYER_OUTPUT
*/
//@{
#define CTRL_STATE_OSD_MIN 0x00
#define CTRL_STATE_OSD1COMPARE 0x00 ///< color compare func = COMPARE_KEY_NEVER/EQUAL
#define CTRL_STATE_OSD1COLORKEY 0x01 ///< OSD1 do color key to see VDO_mix: color key = [index]
#define CTRL_STATE_OSD1BLEND 0x02 ///< blend ctrl of OSD1
#define CTRL_STATE_OSD1ALPHA 0x03 ///< const alpha of OSD1
#define CTRL_STATE_OSD2COMPARE 0x04 ///< color compare func = COMPARE_KEY_NEVER/EQUAL
#define CTRL_STATE_OSD2COLORKEY 0x05 ///< OSD2 do color key to see OSD1: color key = [index]
#define CTRL_STATE_OSD2BLEND 0x06 ///< blend ctrl of OSD2
#define CTRL_STATE_OSD2ALPHA 0x07 ///< const alpha of OSD2
#define CTRL_STATE_OSD_MAX 0x07
#define CTRL_STATE_VDO_MIN 0x08
#define CTRL_STATE_VDO1COMPARE 0x08 ///< color compare func = COMPARE_KEY_NEVER/EQUAL/LESS/GREATER
#define CTRL_STATE_VDO1COLORKEY 0x09 ///< VDO2 do color key to see VDO1: color key = [color]
#define CTRL_STATE_VDO1BLEND 0x0a ///< (reserved)
#define CTRL_STATE_VDO1ALPHA 0x0b ///< (reserved)
#define CTRL_STATE_VDO2COMPARE 0x0c ///< color compare func = COMPARE_KEY_NEVER/EQUAL/LESS/GREATER
#define CTRL_STATE_VDO2COLORKEY 0x0d ///< VDO2 do color key to see VDO1: color key = [color]
#define CTRL_STATE_VDO2BLEND 0x0e ///< blend ctrl of VDO2
#define CTRL_STATE_VDO2ALPHA 0x0f ///< const alpha of VDO2
#define CTRL_STATE_VDO_MAX 0x0f
#define CTRL_STATE_BLEND_MIN 0x10
#define CTRL_STATE_BACKCOLOR 0x10 ///< Background: color
#define CTRL_STATE_ALLCTRL 0x11 ///< bit 0:Swap VDO1 and VDO2 (color key)
#define CTRL_STATE_ALLENABLE 0x12 ///< bit 1:OSD1 enable, bit 2:OSD2 enable, bit 3:VDO1 enable, bit 4:VDO2 enable
#define CTRL_STATE_BLEND_MAX 0x12
#define CTRL_STATE_NUM 0x13
//@}
#define DISP_OSD1_EN 0x02
#define DISP_OSD2_EN 0x04
#define DISP_VDO1_EN 0x08
#define DISP_VDO2_EN 0x10
#define TYPEFMT_TYPE 0x0000ffff ///< Mask for accessing TYPE in LAYER_STATE_TYPEFMT
#define TYPEFMT_TYPE_SHIFT 0 ///< Shift for accessing TYPE in LAYER_STATE_TYPEFMT
#define TYPEFMT_FMT 0xffff0000 ///< Mask for accessing FMT in LAYER_STATE_TYPEFMT
#define TYPEFMT_FMT_SHIFT 16 ///< Shift for accessing FMT in LAYER_STATE_TYPEFMT
#define DISP_PXLFMT_INDEX8 PXLFMT_INDEX8
#define DISP_PXLFMT_ARGB8565_PK PXLFMT_RGBA5658_PK
#define DISP_PXLFMT_ARGB8888_PK PXLFMT_RGBA8888_PK
#define DISP_PXLFMT_ARGB1555_PK PXLFMT_RGBA5551_PK
#define DISP_PXLFMT_ARGB4444_PK PXLFMT_RGBA4444_PK
#define DISP_PXLFMT_YUV422_PK 0x0201
#define DISP_PXLFMT_YUV420_PK 0x0202
/**
Get TYPE value in LAYER_STATE_TYPEFMT.
Get TYPE value in LAYER_STATE_TYPEFMT.
@note Nothing.
@param[in] v Value of LAYER_STATE_TYPEFMT.
@return TYPE value in LAYER_STATE_TYPEFMT.
*/
#define TYPEFMT_GET_TYPE(v) (((v) & TYPEFMT_TYPE) >> TYPEFMT_TYPE_SHIFT)
/**
Get FMT value in LAYER_STATE_TYPEFMT.
Get FMT value in LAYER_STATE_TYPEFMT.
@note Nothing.
@param[in] v Value of LAYER_STATE_TYPEFMT.
@return FMT value in LAYER_STATE_TYPEFMT.
*/
#define TYPEFMT_GET_FMT(v) (((v) & TYPEFMT_FMT) >> TYPEFMT_FMT_SHIFT)
/**
Generate value of LAYER_STATE_TYPEFMT
Generate value of LAYER_STATE_TYPEFMT.
@note Nothing.
@param[in] tp buffer TYPE
@param[in] fmt buffer FMT
@return Value of LAYER_STATE_TYPEFMT.
*/
#define TYPEFMT_MAKE(tp, fmt) (((fmt) << TYPEFMT_FMT_SHIFT) | ((tp) << TYPEFMT_TYPE_SHIFT))
/**
@name SWAPEFFECT methods
*/
//@{
#define SWAPEFFECT_DISCARD 0x00 ///< Discard method. Draw on front (Maybe flicker defect)
#define SWAPEFFECT_COPY 0x01 ///< Copy method. Copy font->back, draw on back, swap back->front
#define SWAPEFFECT_FLIP 0x02 ///< Flip method. Draw on back, swap back->front
#define SWAPEFFECT_ROTATE 0x03 ///< Copy and rotate method. Draw on back, swap back->front
//@}
/**
@name SWAPEFFECT rotate methods
*/
//@{
#define SWAPEFFECT_ROTATE_0 0x000 ///< rotate 0
#define SWAPEFFECT_ROTATE_90 0x010 ///< rotate 90
#define SWAPEFFECT_ROTATE_180 0x020 ///< rotate 180
#define SWAPEFFECT_ROTATE_270 0x030 ///< rotate 270
#define SWAPEFFECT_ROTATE_MASK 0x0F0 ///< Mask for accessing ROTATE
//@}
#define SWAPEFFECT_DEFAULT SWAPEFFECT_DISCARD ///< Defalut value for SWAPEFFECT
#define SWAPEFFECT_XY 0x8000 ///< Rotate
#define BUFCOUNT_DEFAULT (0) ///< Defalut value for BUFCOUNT
#define BUFATTR_SWAPEFFECT 0x00007fff ///< Mask for accessing SWAPEFFECT in LAYER_STATE_BUFATTR
#define BUFATTR_SWAPEFFECT_SHIFT 0 ///< Shift for accessing SWAPEFFECT in LAYER_STATE_BUFATTR
#define BUFATTR_BUFCOUNT 0xffff0000 ///< Mask for accessing BUFCOUNT in LAYER_STATE_BUFATTR
#define BUFATTR_BUFCOUNT_SHIFT 16 ///< Shift for accessing BUFCOUNT in LAYER_STATE_BUFATTR
/**
Get BUFCOUNT value in LAYER_STATE_BUFATTR.
Get BUFCOUNT value in LAYER_STATE_BUFATTR.
@note Nothing.
@param[in] v Value of LAYER_STATE_BUFATTR.
@return BUFCOUNT value in LAYER_STATE_BUFATTR.
*/
#define BUFATTR_GET_BUFCOUNT(v) (((v) & BUFATTR_BUFCOUNT) >> BUFATTR_BUFCOUNT_SHIFT)
/**
Get SWAPEFFEFT method in LAYER_STATE_BUFATTR.
Get SWAPEFFEFT method in LAYER_STATE_BUFATTR.
@note Nothing.
@param[in] v Value of LAYER_STATE_BUFATTR.
@return SWAPEFFEFT method in LAYER_STATE_BUFATTR.
*/
#define BUFATTR_GET_SWAPEFFECT(v) (((v) & BUFATTR_SWAPEFFECT) >> BUFATTR_SWAPEFFECT_SHIFT)
/**
Generate value of LAYER_STATE_BUFATTR
Generate value of LAYER_STATE_BUFATTR.
@note Nothing.
@param[in] swap SWAPEFFECT method
@param[in] bufc BUFCOUNT value
@return Value of LAYER_STATE_BUFATTR.
*/
#define BUFATTR_MAKE(swap, bufc) (((bufc) << BUFATTR_BUFCOUNT_SHIFT) | ((swap) << BUFATTR_SWAPEFFECT_SHIFT))
#define BUFATTR_DEFAULT BUFATTR_MAKE(BUFCOUNT_DEFAULT, SWAPEFFECT_DEFAULT) ///< Default value for LAYER_STATE_BUFATTR
#ifndef MIRROR_X
/**
@name MIRROR methods
*/
//@{
//
#define MIRROR_DISCARD 0x00 ///< no mirror
#define MIRROR_X 0x01 ///< mirror in x direction
#define MIRROR_Y 0x02 ///< mirror in y direction
#define MIRROR_KEEP 0xff ///< keep current direction
//@}
#define MIRROR_DEFAULT (MIRROR_DISCARD) ///< Default value for MIRROR
#endif
#define WINATTR_MIRROR 0x0000ffff ///< Mask for accessing LAYER_STATE_WINATTR
/**
Get MIRROR method in LAYER_STATE_WINATTR.
Get MIRROR method in LAYER_STATE_WINATTR.
@note Nothing.
@param[in] v Value of LAYER_STATE_WINATTR.
@return MIRROR method in LAYER_STATE_WINATTR.
*/
#define WINATTR_GET_MIRROR(v) ((v) & WINATTR_MIRROR)
/**
Generate value of LAYER_STATE_WINATTR
Generate value of LAYER_STATE_WINATTR.
@note Nothing.
@param[in] mirr MIRROR method
@return Value of LAYER_STATE_WINATTR.
*/
#define WINATTR_MAKE(mirr) ((mirr) & WINATTR_MIRROR)
#define WINATTR_DEFAULT WINATTR_MAKE(MIRROR_DEFAULT) ///< Default value for LAYER_STATE_WINATTR
/**
@name Flag for CTRL_STATE_OSD1COMPARE
CTRL_STATE_OSD2COMPARE
CTRL_STATE_VDO1COMPARE
CTRL_STATE_VDO2COMPARE
*/
//@{
#define COMPARE_KEY_NEVER 0 ///< never key
#define COMPARE_KEY_LESS 1 ///< key if pixel color is less then color key
#define COMPARE_KEY_EQUAL 2 ///< key if pixel color is equal to color key
#define COMPARE_KEY_GREATER 3 ///< key if pixel color is grater then color key
//@}
/**
@name Flag for CTRL_STATE_OSD1BLEND
CTRL_STATE_OSD2BLEND
CTRL_STATE_VDO1BLEND
CTRL_STATE_VDO2BLEND
*/
//@{
#ifndef GX_BLEND_OP
#define GX_BLEND_OP
#define BLEND_OPAQUE_000 0x00 ///< Output = Under_Layer
#define BLEND_OPAQUE_012 0x01 ///< Output = This_Layer * 12% + Under_Layer * 88%
#define BLEND_OPAQUE_025 0x02 ///< Output = This_Layer * 25% + Under_Layer * 75%
#define BLEND_OPAQUE_050 0x03 ///< Output = This_Layer * 50% + Under_Layer * 50%
#define BLEND_OPAQUE_075 0x04 ///< Output = This_Layer * 75% + Under_Layer * 25%
#define BLEND_OPAQUE_088 0x05 ///< Output = This_Layer * 88% + Under_Layer * 12%
#define BLEND_OPAQUE_100 0x06 ///< Output = This_Layer
#endif //GX_BLEND_OP
//@}
/**
@name Ctrl value for CTRL_STATE_OSD1BLEND
CTRL_STATE_OSD2BLEND
CTRL_STATE_VDO1BLEND
CTRL_STATE_VDO2BLEND
*/
//@{
#define BLEND_DISABLE 0x00 ///< blending disable
#define BLEND_CONSTALPHA 0x01 ///< blending by layer const alpha
#define BLEND_PIXELALPHA 0x02 ///< blending by layer pixel alpha
#define BLEND_R1 0x03 ///< (reserved)
//@}
//--------------------------------------------------------------------------------------
// function - init/exit
//--------------------------------------------------------------------------------------
extern void GxDisplay_RegBufMan(UINT32 LayerID, LAYER_BUFMAN *pBufMan);
/**
Initialize display.
Initialize display to start control.
@note Nothing
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] uiDispWidth Width of device physical size.
@param[in] uiDispHeight Height of device physical size.
*/
extern void GxDisplay_Init(UINT32 DevID, UINT32 uiDispWidth, UINT32 uiDispHeight);
/**
Uninitialize display.
Uninitialize display to stop control.
@note Nothing
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
*/
extern void GxDisplay_Exit(UINT32 DevID);
//--------------------------------------------------------------------------------------
// function - init layer
//--------------------------------------------------------------------------------------
/**
Initialize display layer.
Initialize display layer buffer & window.
@note User need to call GxDisplay_Flush() to present visual effect on screen.
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] pInit Initial struct LAYER_INIT.
@param[in] bClear Is clear buffer? (TRUE for enable, FALSE for disable).
@return
- @b GX_OK: Successed
- @b others: Failed
*/
extern RESULT GxDisplay_InitLayer(UINT32 LayerID, const LAYER_INIT *pInit, BOOL bClear);
/**
Uninitialize display layer.
Uninitialize display layer.
@note Only return buffer to system, not affect any visual effect on screen.
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
*/
extern void GxDisplay_ExitLayer(UINT32 LayerID);
/**
Check valid of display layer.
Check valid of display layer.
@note Valid = Already initialzed.
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@return
- @b TRUE: Valid
- @b FALSE: Invalid
*/
extern BOOL GxDisplay_IsReady(UINT32 LayerID);
//--------------------------------------------------------------------------------------
// function - set layer state
//--------------------------------------------------------------------------------------
/**
Set state of display layer.
Set state of display layer.
@note User need to call GxDisplay_Flush() to present visual effect on screen.
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] nState State name. (ex: LAYER_STATE_XXX)
@param[in] nValue Value of this state.
*/
extern void GxDisplay_Set(UINT32 LayerID, UINT16 nState, UINT32 nValue);
/**
Get state of display layer.
Get state of display layer.
@note Nothing.
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] nState State name. (ex: LAYER_STATE_XXX)
@return Value of this state.
*/
extern UINT32 GxDisplay_Get(UINT32 LayerID, UINT16 nState);
/**
Set source window of display layer.
Set source window of display layer.
@note Source window is an cropping rectangle of source buffer.
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] x Left of window (base on buffer coordinate)
@param[in] y Top of window (base on buffer coordinate)
@param[in] w Width of window (base on buffer coordinate)
@param[in] h Height of window (base on buffer coordinate)
*/
extern void GxDisplay_SetSrcWindow(UINT32 LayerID, INT32 x, INT32 y, INT32 w, INT32 h);
/**
Set destination window of display layer.
Set destination window of display layer.
@note Destination window is an effective rectangle on device screen.
User need to call GxDisplay_Flush() to present visual effect on screen.
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] x Left of window (base on device physical coordinate)
@param[in] y Top of window (base on device physical coordinate)
@param[in] w Width of window (base on device physical coordinate)
@param[in] h Height of window (base on device physical coordinate)
@param[in] uiMirror Mirror & flip control flag (ex: MIRROR_XXX).
*/
extern void GxDisplay_SetDestWindow(UINT32 LayerID, INT32 x, INT32 y, INT32 w, INT32 h, UINT32 uiMirror);
/**
Set swapping of display layer.
Set buffer swapping control method of display layer.
@note User need to call GxDisplay_Flush() to present visual effect on screen.
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] uiSwapEffect Buffer swapping control method (ex: SWAPEFFECT_XXX).
*/
extern void GxDisplay_SetSwapEffect(UINT32 LayerID, UINT32 uiSwapEffect);
/**
Set palette of display layer.
Set palette of display layer.
@note Palette is only for INDEX format buffer.
User need to call GxDisplay_Flush() to present visual effect on screen.
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] uiStartID Start index of current change range (ex: 0~255).
@param[in] uiCount Total index count of current change range (ex: 0~255).
@param[in] pTable Pointer to palette color items of current change.
*/
extern void GxDisplay_SetPalette(UINT32 LayerID, UINT16 uiStartID, UINT16 uiCount, const PALETTE_ITEM *pTable);
/**
Get palette of display layer.
Get palette of display layer.
@note Palette is only for INDEX format buffer.
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] uiStartID Start index of current readback range (ex: 0~255).
@param[in] uiCount Total index count of current readback range (ex: 0~255).
@param[in] pTable Pointer to palette color items of current readback.
*/
extern void GxDisplay_GetPalette(UINT32 LayerID, UINT16 uiStartID, UINT16 uiCount, PALETTE_ITEM *pTable);
/**
Set color key of display layer.
Set color key of display layer.
@note color should be RGB valud
@param[in] DevID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] enable enable/disable feature
@param[in] color RGB color value
*/
extern void GxDisplay_SetColorKey(UINT32 LayerID, UINT32 enable,UINT32 color);
/**
Set backgorund color of display device.
Set backgorund color of display device.
@note User need to call GxDisplay_Flush() to present visual effect on screen.
@param[in] uiColor Backgound color (ex: this is a YCbCr color).
*/
/*
extern void GxDisplay_SetBack (UINT32 uiColor);
*/
#define GxDisplay_SetBack(uiColor) GxDisplay_Set(DOUT1|LAYER_OUTPUT, CTRL_STATE_BACKCOLOR, (uiColor));
//--------------------------------------------------------------------------------------
// function - state flush control
//--------------------------------------------------------------------------------------
/**
Flush states of display layer.
Flush states of display layer.
@note Nothing.
@param[in] LayerID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] bWait Wait VD (TRUE for wait, FALSE for not wait).
*/
extern void GxDisplay_FlushEx(UINT32 LayerID, BOOL bWait);
/**
Flush states of display layer.
Flush states of display layer.
@note Different between FlushEx() is, it is always auto wait VD.
@param[in] LayerID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
*/
/*
extern void GxDisplay_Flush (UINT32 LayerID); //this will auto wait VD
*/
#define GxDisplay_Flush(LayerID) GxDisplay_FlushEx(DOUT1|(LayerID), TRUE)
/**
Flush states of all display layer.
Flush states of all display layer.
@note Different between FlushEx() is, it is flush DOUT1 all layers.
@param[in] bWait Wait VD (TRUE for wait, FALSE for not wait).
*/
/*
extern void GxDisplay_FlushAllEx (BOOL bWait);
*/
#define GxDisplay_FlushAllEx(bWait) GxDisplay_FlushEx(DOUT1|LAYER_ALL, (BOOL)(bWait))
/**
Flush states of all display layer.
Flush states of all display layer.
@note Different between FlushEx() is, it is flush DOUT1 all layers, and always auto wait VD.
*/
/*
extern void GxDisplay_FlushAll (void); //this will auto wait VD
*/
#define GxDisplay_FlushAll() GxDisplay_Flush(DOUT1|LAYER_ALL)
//--------------------------------------------------------------------------------------
// function - buffer swapping control
//--------------------------------------------------------------------------------------
// DISPLAY : DC.uiType = TYPE_FB
/**
Begin draw operation to display layer.
Begin draw operation to display layer.
@note Nothing.
@param[in] LayerID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@return Current DC of this layer.
*/
extern void *GxDisplay_BeginDraw(UINT32 LayerID);
/**
End draw operation to display layer.
End draw operation to display layer.
@note Nothing.
@param[in] LayerID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] pLayerDC Current DC of this layer.
*/
extern void GxDisplay_EndDraw(UINT32 LayerID, void *pLayerBuf);
/**
Force flip one times to display layer.
Force flip one times to display layer.
@note Nothing.
@param[in] LayerID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
*/
extern void GxDisplay_ForceFlip(UINT32 LayerID);
/**
Swapping buffer of display layer.
Swapping buffer of display layer.
@note Nothing.
@param[in] LayerID Device id and Layer id.(ex: DOUT1|LAYER_XXX or DOUT2|LAYER_XXX ).
@param[in] bWait Wait VD (TRUE for wait, FALSE for not wait).
*/
extern void GxDisplay_FlipEx(UINT32 LayerID, BOOL bWait); //NEW API
/**
Wait VD of display device.
Swapping buffer of display layer.
@note Nothing.
@param[in] LayerID Device id.(ex: DOUT1 or DOUT2).
*/
extern void GxDisplay_WaitVDEx(UINT32 LayerID); //NEW API
/**
Swapping buffer of display layer.
Swapping buffer of display layer.
@note Different between FlipEx() is, it is flip DOUT1 all layers.
@param[in] bWait Wait VD (TRUE for wait, FALSE for not wait).
*/
/*
extern void GxDisplay_Flip (BOOL bWait); //update all layers, and show output to screen
*/
#define GxDisplay_Flip(bWait) GxDisplay_FlipEx(DOUT1|LAYER_ALL, (BOOL)(bWait))
/**
Wait VD of display device.
Swapping buffer of display layer.
@note Different between WaitVDEx() is, it is only wait DOUT1 device.
@param[in] LayerID Device id.(ex: DOUT1 or DOUT2).
*/
/*
extern void GxDisplay_WaitVD (void);
*/
#define GxDisplay_WaitVD() GxDisplay_WaitVDEx(DOUT1)
#ifdef __cplusplus
} //extern "C"
#endif
#endif//_GX_DISPLAY_H_