123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- /******************************************************************************
- Copyright (C), 2001-2011, Hisilicon Tech. Co., Ltd.
- ******************************************************************************
- File Name : hifb.h
- Version : Initial Draft
- Author : Hisilicon multimedia software group
- Created :
- Description :
- History :
- 1.Date : 2009/03/12
- Author :
- Modification: Created file
- ******************************************************************************/
- #ifndef __HIFB_H__
- #define __HIFB_H__
- #ifdef __cplusplus
- #if __cplusplus
- extern "C"{
- #endif
- #endif /* __cplusplus */
- #include "hi_type.h"
- #include "hi_common.h"
- #include <linux/fb.h>
- /*************************** Structure Definition ****************************/
- #define IOC_TYPE_HIFB 'F'
- /** To obtain the colorkey of an overlay layer */
- #define FBIOGET_COLORKEY_HIFB _IOR(IOC_TYPE_HIFB, 90, HIFB_COLORKEY_S)
- /** To set the colorkey of an overlay layer */
- #define FBIOPUT_COLORKEY_HIFB _IOW(IOC_TYPE_HIFB, 91, HIFB_COLORKEY_S)
- /** To get the alpha of an overlay layer */
- #define FBIOGET_ALPHA_HIFB _IOR(IOC_TYPE_HIFB, 92, HIFB_ALPHA_S)
- /** To set the alpha of an overlay layer */
- #define FBIOPUT_ALPHA_HIFB _IOW(IOC_TYPE_HIFB, 93, HIFB_ALPHA_S)
- /** To get the origin of an overlay layer on the screen */
- #define FBIOGET_SCREEN_ORIGIN_HIFB _IOR(IOC_TYPE_HIFB, 94, HIFB_POINT_S)
- /** To set the origin of an overlay layer on the screen */
- #define FBIOPUT_SCREEN_ORIGIN_HIFB _IOW(IOC_TYPE_HIFB, 95, HIFB_POINT_S)
- /** To obtain the anti-flicker setting of an overlay layer */
- #define FBIOGET_DEFLICKER_HIFB _IOR(IOC_TYPE_HIFB, 98, HIFB_DEFLICKER_S)
- /** To set the anti-flicker setting of an overlay layer */
- #define FBIOPUT_DEFLICKER_HIFB _IOW(IOC_TYPE_HIFB, 99, HIFB_DEFLICKER_S)
- /** To wait for the vertical blanking region of an overlay layer */
- #define FBIOGET_VBLANK_HIFB _IO(IOC_TYPE_HIFB, 100)
- /** To set the display state of an overlay layer */
- #define FBIOPUT_SHOW_HIFB _IOW(IOC_TYPE_HIFB, 101, HI_BOOL)
- /** To obtain the display state of an overlay layer */
- #define FBIOGET_SHOW_HIFB _IOR(IOC_TYPE_HIFB, 102, HI_BOOL)
- /** to obtain the capability of an overlay layer */
- #define FBIOGET_CAPABILITY_HIFB _IOR(IOC_TYPE_HIFB, 103, HIFB_CAPABILITY_S)
- /** set the screen output size */
- #define FBIOPUT_SCREENSIZE _IOW(IOC_TYPE_HIFB, 130, HIFB_SIZE_S)
- /** get the screen output size */
- #define FBIOGET_SCREENSIZE _IOR(IOC_TYPE_HIFB, 131, HIFB_SIZE_S)
- /** To display multiple surfaces in turn and set the alpha and colorkey attributes */
- #define FBIOFLIP_SURFACE _IOW(IOC_TYPE_HIFB, 132, HIFB_SURFACEEX_S)
- /**To set the compression function status of an overlay layer*/
- #define FBIOPUT_COMPRESSION_HIFB _IOW(IOC_TYPE_HIFB, 133, HI_BOOL)
- /**To obtain the compression function status of an overlay layer*/
- #define FBIOGET_COMPRESSION_HIFB _IOR(IOC_TYPE_HIFB, 134, HI_BOOL)
- /**To set the hdr function status of an overlay layer*/
- #define FBIOPUT_DYNAMIC_RANGE_HIFB _IOW(IOC_TYPE_HIFB, 139, HIFB_DYNAMIC_RANGE_E)
- /**To get the hdr function status of an overlay layer*/
- #define FBIOGET_DYNAMIC_RANGE_HIFB _IOR(IOC_TYPE_HIFB, 140, HIFB_DYNAMIC_RANGE_E)
- /**To release the layer*/
- #define FBIO_RELEASE_HIFB _IO(IOC_TYPE_HIFB, 150)
- typedef struct
- {
- HI_U32 u32Width;
- HI_U32 u32Height;
- }HIFB_SIZE_S;
- static inline HI_U8 hifb_rgb(const struct fb_bitfield* pBit, HI_S32 color)
- {
- return ((HI_U8)((((HI_U32)color)>>pBit->offset) << (8-pBit->length)) +
- ((HI_U8)(((HI_U32)(color)>>pBit->offset) << (8-pBit->length)) >> pBit->length));
- }
- static inline HI_S32 hifb_color2key(const struct fb_var_screeninfo* pVar, HI_S32 color)
- {
- if (pVar->bits_per_pixel <= 8)
- {
- return color;
- }
- else
- {
- HI_U8 r, g, b;
- r = hifb_rgb(&pVar->red, color);
- g = hifb_rgb(&pVar->green, color);
- b = hifb_rgb(&pVar->blue, color);
- return (r<<16) + (g<<8) + b;
- }
- }
- typedef enum hifbDYNAMIC_RANGE_E
- {
- HIFB_DYNAMIC_RANGE_SDR8 = 0,
- HIFB_DYNAMIC_RANGE_SDR10,
- HIFB_DYNAMIC_RANGE_HDR10,
- HIFB_DYNAMIC_RANGE_HLG,
- HIFB_DYNAMIC_RANGE_SLF,
- HIFB_DYNAMIC_RANGE_BUTT
- } HIFB_DYNAMIC_RANGE_E;
- typedef struct
- {
- HI_BOOL bKeyEnable; /* colorkey enable flag */
- HI_U32 u32Key; /* colorkey value, maybe contains alpha */
- }HIFB_COLORKEY_S;
- typedef struct
- {
- HI_S32 x;
- HI_S32 y;
- HI_S32 w;
- HI_S32 h;
- } HIFB_RECT;
- typedef struct
- {
- HI_S32 s32XPos; /**< horizontal position */
- HI_S32 s32YPos; /**< vertical position */
- }HIFB_POINT_S;
- typedef struct hiHIFB_DEFLICKER_S
- {
- HI_U32 u32HDfLevel; /**< horizontal deflicker level */
- HI_U32 u32VDfLevel; /**< vertical deflicker level */
- HI_U8 ATTRIBUTE *pu8HDfCoef; /**< horizontal deflicker coefficient */
- HI_U8 ATTRIBUTE *pu8VDfCoef; /**< vertical deflicker coefficient */
- }HIFB_DEFLICKER_S;
- /** Alpha info */
- typedef struct
- {
- HI_BOOL bAlphaEnable; /**< alpha enable flag */
- HI_BOOL bAlphaChannel; /**< alpha channel enable flag */
- HI_U8 u8Alpha0; /**< alpha0 value, used in ARGB1555 */
- HI_U8 u8Alpha1; /**< alpha1 value, used in ARGB1555 */
- HI_U8 u8GlobalAlpha; /**< global alpha value */
- HI_U8 u8Reserved;
- }HIFB_ALPHA_S;
- typedef enum
- {
- HIFB_FMT_RGB565 = 0,
- HIFB_FMT_RGB888, /**< RGB888 24bpp */
- HIFB_FMT_KRGB444, /**< RGB444 16bpp */
- HIFB_FMT_KRGB555, /**< RGB555 16bpp */
- HIFB_FMT_KRGB888, /**< RGB888 32bpp */
- HIFB_FMT_ARGB4444, /**< ARGB4444 */
- HIFB_FMT_ARGB1555, /**< ARGB1555 */
- HIFB_FMT_ARGB8888, /**< ARGB8888 */
- HIFB_FMT_ARGB8565, /**< ARGB8565 */
- HIFB_FMT_RGBA4444, /**< ARGB4444 */
- HIFB_FMT_RGBA5551, /**< RGBA5551 */
- HIFB_FMT_RGBA5658, /**< RGBA5658 */
- HIFB_FMT_RGBA8888, /**< RGBA8888 */
- HIFB_FMT_BGR565, /**< BGR565 */
- HIFB_FMT_BGR888, /**< BGR888 */
- HIFB_FMT_ABGR4444, /**< ABGR4444 */
- HIFB_FMT_ABGR1555, /**< ABGR1555 */
- HIFB_FMT_ABGR8888, /**< ABGR8888 */
- HIFB_FMT_ABGR8565, /**< ABGR8565 */
- HIFB_FMT_KBGR444, /**< BGR444 16bpp */
- HIFB_FMT_KBGR555, /**< BGR555 16bpp */
- HIFB_FMT_KBGR888, /**< BGR888 32bpp */
- HIFB_FMT_1BPP, /**< clut1 */
- HIFB_FMT_2BPP, /**< clut2 */
- HIFB_FMT_4BPP, /**< clut4 */
- HIFB_FMT_8BPP, /**< clut8 */
- HIFB_FMT_ACLUT44, /**< AClUT44*/
- HIFB_FMT_ACLUT88, /**< ACLUT88 */
- HIFB_FMT_PUYVY, /**< UYVY */
- HIFB_FMT_PYUYV, /**< YUYV */
- HIFB_FMT_PYVYU, /**< YVYU */
- HIFB_FMT_YUV888, /**< YUV888 */
- HIFB_FMT_AYUV8888, /**< AYUV8888 */
- HIFB_FMT_YUVA8888, /**< YUVA8888 */
- HIFB_FMT_BUTT
- }HIFB_COLOR_FMT_E;
- typedef struct
- {
- HI_BOOL bKeyRgb;
- HI_BOOL bKeyAlpha; /**< whether support colorkey alpha */
- HI_BOOL bGlobalAlpha; /**< whether support global alpha */
- HI_BOOL bCmap; /**< whether support color map */
- HI_BOOL bHasCmapReg; /**< whether has color map register*/
- HI_BOOL bColFmt[HIFB_FMT_BUTT]; /**< support which color format */
- HI_BOOL bVoScale; /**< support vo scale*/
- HI_BOOL bLayerSupported; /**< whether support a certain layer, for example:x5 HD support HIFB_SD_0 not support HIFB_SD_1*/
- HI_U32 u32MaxWidth; /**< the max pixels per line */
- HI_U32 u32MaxHeight; /**< the max lines */
- HI_U32 u32MinWidth; /**< the min pixels per line */
- HI_U32 u32MinHeight; /**< the min lines */
- HI_U32 u32VDefLevel; /**< vertical deflicker level, 0 means vertical deflicker is unsupported */
- HI_U32 u32HDefLevel; /**< horizontal deflicker level, 0 means horizontal deflicker is unsupported */
- HI_BOOL bDcmp;
- HI_BOOL bPreMul;
- HI_BOOL bGHDR; /* NEW Feature. Is GHDR supported. */
- }HIFB_CAPABILITY_S;
- /*refresh mode*/
- typedef enum
- {
- HIFB_LAYER_BUF_DOUBLE = 0x0, /**< 2 display buf in fb */
- HIFB_LAYER_BUF_ONE = 0x1, /**< 1 display buf in fb */
- HIFB_LAYER_BUF_NONE = 0x2, /**< no display buf in fb,the buf user refreshed will be directly set to VO*/
- HIFB_LAYER_BUF_DOUBLE_IMMEDIATE=0x3, /**< 2 display buf in fb, each refresh will be displayed*/
- HIFB_LAYER_BUF_BUTT
- } HIFB_LAYER_BUF_E;
- /* surface info */
- typedef struct
- {
- HI_U64 u64PhyAddr; /**< start physical address */
- HI_U64 u64GBPhyAddr; // TODO new
- HI_U32 u32Width; /**< width pixels */
- HI_U32 u32Height; /**< height pixels */
- HI_U32 u32Pitch; /**< line pixels */
- HIFB_COLOR_FMT_E enFmt; /**< color format */
- HIFB_DYNAMIC_RANGE_E enDynamicRange; /* NEW dynamic range. */
- }HIFB_SURFACE_S;
- typedef struct
- {
- HI_U64 u64PhyAddr;
- HIFB_ALPHA_S stAlpha;
- HIFB_COLORKEY_S stColorkey;
- }HIFB_SURFACEEX_S;
- /* refresh surface info */
- typedef struct
- {
- HIFB_SURFACE_S stCanvas;
- HIFB_RECT UpdateRect; /* refresh region*/
- }HIFB_BUFFER_S;
- /* cursor info */
- typedef struct
- {
- HIFB_SURFACE_S stCursor;
- HIFB_POINT_S stHotPos;
- } HIFB_CURSOR_S;
- /* DDR detect zone info */
- typedef struct
- {
- HI_U32 u32StartSection;
- HI_U32 u32ZoneNums;
- } HIFB_DDRZONE_S;
- /* crusor handle */
- /* Attention:surface in cursor will be released by user*/
- #define FBIOPUT_CURSOR_INFO _IOW(IOC_TYPE_HIFB, 104, HIFB_CURSOR_S )
- #define FBIOGET_CURSOR_INFO _IOW(IOC_TYPE_HIFB, 105, HIFB_CURSOR_S )
- #define FBIOPUT_CURSOR_STATE _IOW(IOC_TYPE_HIFB, 106, HI_BOOL )
- #define FBIOGET_CURSOR_STATE _IOW(IOC_TYPE_HIFB, 107, HI_BOOL )
- #define FBIOPUT_CURSOR_POS _IOW(IOC_TYPE_HIFB, 108, HIFB_POINT_S )
- #define FBIOGET_CURSOR_POS _IOR(IOC_TYPE_HIFB, 109, HIFB_POINT_S )
- #define FBIOPUT_CURSOR_COLORKEY _IOR(IOC_TYPE_HIFB, 110, HIFB_COLORKEY_S )
- #define FBIOGET_CURSOR_COLORKEY _IOW(IOC_TYPE_HIFB, 111, HIFB_COLORKEY_S )
- #define FBIOPUT_CURSOR_ALPHA _IOR(IOC_TYPE_HIFB, 112, HIFB_ALPHA_S )
- #define FBIOGET_CURSOR_ALPHA _IOW(IOC_TYPE_HIFB, 113, HIFB_ALPHA_S )
- /** cursor will be separated from attached layer automatically if you attach cursor to another layer,that means
- cursor can be attached to only one layer at any time*/
- #define FBIOPUT_CURSOR_ATTCHCURSOR _IOW(IOC_TYPE_HIFB, 114, HI_U32 )
- #define FBIOPUT_CURSOR_DETACHCURSOR _IOW(IOC_TYPE_HIFB, 115, HI_U32 )
- /**antiflicker level*/
- /**Auto means fb will choose a appropriate antiflicker level automatically according to the color info of map*/
- typedef enum
- {
- HIFB_LAYER_ANTIFLICKER_NONE = 0x0, /**< no antiflicker*/
- HIFB_LAYER_ANTIFLICKER_LOW = 0x1, /**< low level*/
- HIFB_LAYER_ANTIFLICKER_MIDDLE = 0x2,/**< middle level*/
- HIFB_LAYER_ANTIFLICKER_HIGH = 0x3, /**< high level*/
- HIFB_LAYER_ANTIFLICKER_AUTO = 0x4, /**< auto*/
- HIFB_LAYER_ANTIFLICKER_BUTT
- }HIFB_LAYER_ANTIFLICKER_LEVEL_E;
- /* MIRROR mode */
- typedef enum
- {
- HIFB_MIRROR_NONE = 0x0,
- HIFB_MIRROR_HORIZONTAL = 0x1,
- HIFB_MIRROR_VERTICAL = 0x2,
- HIFB_MIRROR_BOTH= 0x3,
- HIFB_MIRROR_BUTT
- }HIFB_MIRROR_MODE_E;
- /* ROTATE mode */
- typedef enum
- {
- HIFB_ROTATE_NONE = 0x0,
- HIFB_ROTATE_90 = 0x1,
- HIFB_ROTATE_180 = 0x2,
- HIFB_ROTATE_270= 0x3,
- HIFB_ROTATE_BUTT
- }HIFB_ROTATE_MODE_E;
- /*layer info maskbit*/
- typedef enum
- {
- HIFB_LAYERMASK_BUFMODE = 0x1, /**< BUFMODE bitmask */
- HIFB_LAYERMASK_ANTIFLICKER_MODE = 0x2, /**< ANTIFLICKER_MODE bitmask */
- HIFB_LAYERMASK_POS = 0x4, /**< the position bitmask */
- HIFB_LAYERMASK_CANVASSIZE = 0x8, /**< canvassize bitmask */
- HIFB_LAYERMASK_DISPSIZE = 0x10, /**< displaysize bitmask */
- HIFB_LAYERMASK_SCREENSIZE = 0x20, /**< screensize bitmask */
- HIFB_LAYERMASK_BMUL = 0x40, /**< pre-mult bitmask */
- HIFB_LAYERMASK_BUTT
- }HIFB_LAYER_INFO_MASKBIT;
- /**layer info*/
- typedef struct
- {
- HIFB_LAYER_BUF_E BufMode;
- HIFB_LAYER_ANTIFLICKER_LEVEL_E eAntiflickerLevel;
- HI_S32 s32XPos; /**< the x pos of origion point in screen */
- HI_S32 s32YPos; /**< the y pos of origion point in screen */
- HI_U32 u32CanvasWidth; /**< the width of canvas buffer */
- HI_U32 u32CanvasHeight; /**< the height of canvas buffer */
- HI_U32 u32DisplayWidth; /**< the width of display buf in fb.for 0 buf ,there is no display buf in fb, so it's effectless*/
- HI_U32 u32DisplayHeight; /**< the height of display buf in fb. */
- HI_U32 u32ScreenWidth; /**< the width of screen */
- HI_U32 u32ScreenHeight; /**< the height of screen */
- HI_BOOL bPreMul; /**< The data drawed in buf is premul data or not*/
- HI_U32 u32Mask; /**< param modify mask bit*/
- }HIFB_LAYER_INFO_S;
- /** To set the layer information */
- #define FBIOPUT_LAYER_INFO _IOW(IOC_TYPE_HIFB, 120, HIFB_LAYER_INFO_S)
- /** To get the layer information */
- #define FBIOGET_LAYER_INFO _IOR(IOC_TYPE_HIFB, 121, HIFB_LAYER_INFO_S)
- /** To get canvas buf */
- #define FBIOGET_CANVAS_BUFFER _IOR(IOC_TYPE_HIFB, 123, HIFB_BUFFER_S)
- /** To refresh the displayed contents in extended mode */
- #define FBIO_REFRESH _IOW(IOC_TYPE_HIFB, 124, HIFB_BUFFER_S)
- /**sync refresh*/
- #define FBIO_WAITFOR_FREFRESH_DONE _IO(IOC_TYPE_HIFB, 125)
- /* To set the mirror mode */
- #define FBIOPUT_MIRROR_MODE _IOW(IOC_TYPE_HIFB, 126, HIFB_MIRROR_MODE_E)
- /* To get the mirror mode */
- #define FBIOGET_MIRROR_MODE _IOW(IOC_TYPE_HIFB, 127, HIFB_MIRROR_MODE_E)
- /* To set the rotate mode */
- #define FBIOPUT_ROTATE_MODE _IOW(IOC_TYPE_HIFB, 128, HIFB_ROTATE_MODE_E)
- /* To get the rotate mode */
- #define FBIOGET_ROTATE_MODE _IOW(IOC_TYPE_HIFB, 129, HIFB_ROTATE_MODE_E)
- /**To set the DDR detect zone of an overlay layer*/
- #define FBIOPUT_MDDRDETECT_HIFB _IOW(IOC_TYPE_HIFB, 135, HIFB_DDRZONE_S)
- /**To get the DDR detect zone of an overlay layer*/
- #define FBIOGET_MDDRDETECT_HIFB _IOW(IOC_TYPE_HIFB, 136, HIFB_DDRZONE_S)
- #ifdef __cplusplus
- #if __cplusplus
- }
- #endif
- #endif /* __cplusplus */
- #endif /* __HIFB_H__ */
|