nt9856x/rtos/code/hdal/include/hd_videoout.h
2023-03-28 15:07:53 +08:00

437 lines
24 KiB
C
Executable File

/**
@brief Header file of video output module.\n
This file contains the functions which is related to video output in the chip.
@file hd_videoout.h
@ingroup mhdal
@note Nothing.
Copyright Novatek Microelectronics Corp. 2018. All rights reserved.
*/
#ifndef _HD_VIDEOOUT_H_
#define _HD_VIDEOOUT_H_
/********************************************************************
INCLUDE FILES
********************************************************************/
#include "hd_type.h"
#include "hd_util.h"
/********************************************************************
MACRO CONSTANT DEFINITIONS
********************************************************************/
#define HD_VIDEOOUT_MAX_IN 32 ///< max count of input of this device (interface)
#define HD_VIDEOOUT_MAX_OUT 1 ///< max count of output of this device (interface)
#define HD_FB_MAX 4 ///< max count of FB (interface)
/********************************************************************
MACRO FUNCTION DEFINITIONS
********************************************************************/
/********************************************************************
DRIVER RELATED TYPE DEFINITION
********************************************************************/
typedef enum _HD_VIDEOOUT_INPUT_DIM {
HD_VIDEOOUT_IN_AUTO = 0, ///< IN VIDEO FORMAT IS SAME AS output
HD_VIDEOOUT_IN_640x480, ///< IN VIDEO FORMAT IS 640x480
HD_VIDEOOUT_IN_720x480, ///< IN VIDEO FORMAT IS 720X480
HD_VIDEOOUT_IN_720x576, ///< IN VIDEO FORMAT IS 720x576
HD_VIDEOOUT_IN_1024x768, ///< IN VIDEO FORMAT IS 1024x768
HD_VIDEOOUT_IN_800x600, ///< IN VIDEO FORMAT IS 800x600
HD_VIDEOOUT_IN_1280x720, ///< IN VIDEO FORMAT IS 1280x720
HD_VIDEOOUT_IN_1280x1024, ///< IN VIDEO FORMAT IS 1280x1024
HD_VIDEOOUT_IN_1600x1200, ///< IN VIDEO FORMAT IS 1600x1200
HD_VIDEOOUT_IN_2560x720, ///< IN VIDEO FORMAT IS 2560x720
HD_VIDEOOUT_IN_2560x1440, ///< IN VIDEO FORMAT IS 2560x1440
HD_VIDEOOUT_IN_1920x1080, ///< IN VIDEO FORMAT IS 1920x1080
HD_VIDEOOUT_IN_3840x1080, ///< IN VIDEO FORMAT IS 3840x1080
HD_VIDEOOUT_IN_3840x2160, ///< IN VIDEO FORMAT IS 3840x2160
HD_VIDEOOUT_IN_1440x900, ///< IN VIDEO FORMAT IS 1440x900
HD_VIDEOOUT_IN_1680x1050, ///< IN VIDEO FORMAT IS 1680x1050
HD_VIDEOOUT_IN_1920x1200, ///< IN VIDEO FORMAT IS 1920x1200
HD_VIDEOOUT_INPUT_DIM_MAX,
ENUM_DUMMY4WORD(HD_VIDEOOUT_INPUT_DIM)
} HD_VIDEOOUT_INPUT_DIM;
typedef enum _HD_VIDEOOUT_LCD_ID {
HD_VIDEOOUT_LCD_0, ///< LCD ID 0
HD_VIDEOOUT_LCD_1, ///< LCD ID 1
HD_VIDEOOUT_LCD_2, ///< LCD ID 2
HD_VIDEOOUT_LCD_3, ///< LCD ID 3
HD_VIDEOOUT_LCD_4, ///< LCD ID 4
ENUM_DUMMY4WORD(HD_VIDEOOUT_LCD_ID)
} HD_VIDEOOUT_LCD_ID;
typedef enum _HD_VIDEOOUT_HDMI_ID {
HD_VIDEOOUT_HDMI_640X480P60 = 1, ///< HDMI VIDEO FORMAT IS 640X480 & PROGRESSIVE 60FPS
HD_VIDEOOUT_HDMI_720X480P60 = 2, ///< HDMI VIDEO FORMAT IS 720X480 & PROGRESSIVE 60FPS & 4:3
HD_VIDEOOUT_HDMI_720X480P60_16X9 = 3, ///< HDMI VIDEO FORMAT IS 720X480 & PROGRESSIVE 60FPS & 16:9
HD_VIDEOOUT_HDMI_1280X720P60 = 4, ///< HDMI VIDEO FORMAT IS 1280X720 & PROGRESSIVE 60FPS
HD_VIDEOOUT_HDMI_1920X1080I60 = 5, ///< HDMI VIDEO FORMAT IS 1920X1080 & INTERLACED 60FPS
HD_VIDEOOUT_HDMI_720X480I60 = 6, ///< HDMI VIDEO FORMAT IS 720X480 & INTERLACED 60FPS
HD_VIDEOOUT_HDMI_720X480I60_16X9 = 7, ///< HDMI VIDEO FORMAT IS 720X480 & INTERLACED 60FPS & 16:9
HD_VIDEOOUT_HDMI_720X240P60 = 8, ///< HDMI VIDEO FORMAT IS 720X240 & PROGRESSIVE 60FPS
HD_VIDEOOUT_HDMI_720X240P60_16X9 = 9, ///< HDMI VIDEO FORMAT IS 720X240 & PROGRESSIVE 60FPS & 16:9
HD_VIDEOOUT_HDMI_1440X480I60 = 10, ///< HDMI VIDEO FORMAT IS 1440X480 & INTERLACED 60FPS
HD_VIDEOOUT_HDMI_1440X480I60_16X9 = 11, ///< HDMI VIDEO FORMAT IS 1440X480 & INTERLACED 60FPS & 16:9
HD_VIDEOOUT_HDMI_1440X240P60 = 12, ///< HDMI VIDEO FORMAT IS 1440X240 & PROGRESSIVE 60FPS
HD_VIDEOOUT_HDMI_1440X240P60_16X9 = 13, ///< HDMI VIDEO FORMAT IS 1440X240 & PROGRESSIVE 60FPS & 16:9
HD_VIDEOOUT_HDMI_1440X480P60 = 14, ///< HDMI VIDEO FORMAT IS 1440X480 & PROGRESSIVE 60FPS
HD_VIDEOOUT_HDMI_1440X480P60_16X9 = 15, ///< HDMI VIDEO FORMAT IS 1440X480 & PROGRESSIVE 60FPS & 16:9
HD_VIDEOOUT_HDMI_1920X1080P60 = 16, ///< HDMI VIDEO FORMAT IS 1920X1080 & PROGRESSIVE 60FPS
HD_VIDEOOUT_HDMI_720X576P50 = 17, ///< HDMI VIDEO FORMAT IS 720X576 & PROGRESSIVE 50FPS
HD_VIDEOOUT_HDMI_720X576P50_16X9 = 18, ///< HDMI VIDEO FORMAT IS 720X576 & PROGRESSIVE 50FPS & 16:9
HD_VIDEOOUT_HDMI_1280X720P50 = 19, ///< HDMI VIDEO FORMAT IS 1280X720 & PROGRESSIVE 50FPS
HD_VIDEOOUT_HDMI_1920X1080I50 = 20, ///< HDMI VIDEO FORMAT IS 1920X1080 & INTERLACED 50FPS
HD_VIDEOOUT_HDMI_720X576I50 = 21, ///< HDMI VIDEO FORMAT IS 720X576 & INTERLACED 50FPS
HD_VIDEOOUT_HDMI_720X576I50_16X9 = 22, ///< HDMI VIDEO FORMAT IS 720X576 & INTERLACED 50FPS & 16:9
HD_VIDEOOUT_HDMI_720X288P50 = 23, ///< HDMI VIDEO FORMAT IS 720X288 & PROGRESSIVE 50FPS
HD_VIDEOOUT_HDMI_720X288P50_16X9 = 24, ///< HDMI VIDEO FORMAT IS 720X288 & PROGRESSIVE 50FPS & 16:9
HD_VIDEOOUT_HDMI_1440X576I50 = 25, ///< HDMI VIDEO FORMAT IS 1440X576 & INTERLACED 50FPS
HD_VIDEOOUT_HDMI_1440X576I50_16X9 = 26, ///< HDMI VIDEO FORMAT IS 1440X576 & INTERLACED 50FPS & 16:9
HD_VIDEOOUT_HDMI_1440X288P50 = 27, ///< HDMI VIDEO FORMAT IS 1440X288 & PROGRESSIVE 50FPS
HD_VIDEOOUT_HDMI_1440X288P50_16X9 = 28, ///< HDMI VIDEO FORMAT IS 1440X288 & PROGRESSIVE 50FPS & 16:9
HD_VIDEOOUT_HDMI_1440X576P50 = 29, ///< HDMI VIDEO FORMAT IS 1440X576 & PROGRESSIVE 50FPS
HD_VIDEOOUT_HDMI_1440X576P50_16X9 = 30, ///< HDMI VIDEO FORMAT IS 1440X576 & PROGRESSIVE 50FPS & 16:9
HD_VIDEOOUT_HDMI_1920X1080P50 = 31, ///< HDMI VIDEO FORMAT IS 1920X1080 & PROGRESSIVE 50FPS
HD_VIDEOOUT_HDMI_1920X1080P24 = 32, ///< HDMI VIDEO FORMAT IS 1920X1080 & PROGRESSIVE 24FPS
HD_VIDEOOUT_HDMI_1920X1080P25 = 33, ///< HDMI VIDEO FORMAT IS 1920X1080 & PROGRESSIVE 25FPS
HD_VIDEOOUT_HDMI_1920X1080P30 = 34, ///< HDMI VIDEO FORMAT IS 1920X1080 & PROGRESSIVE 30FPS
HD_VIDEOOUT_HDMI_1920X1080I50_VT1250 = 39, ///< HDMI VIDEO FORMAT IS 1920X1080 & INTERLACED 50FPS & V-TOTAL IS 1250 LINES
HD_VIDEOOUT_HDMI_1920X1080I100 = 40, ///< HDMI VIDEO FORMAT IS 1920X1080 & INTERLACED 100FPS
HD_VIDEOOUT_HDMI_1280X720P100 = 41, ///< HDMI VIDEO FORMAT IS 1280X720 & PROGRESSIVE 100FPS
HD_VIDEOOUT_HDMI_720X576P100 = 42, ///< HDMI VIDEO FORMAT IS 720X576 & PROGRESSIVE 100FPS
HD_VIDEOOUT_HDMI_720X576P100_16X9 = 43, ///< HDMI VIDEO FORMAT IS 720X576 & PROGRESSIVE 100FPS & 16:9
HD_VIDEOOUT_HDMI_720X576I100 = 44, ///< HDMI VIDEO FORMAT IS 720X576 & INTERLACED 100FPS
HD_VIDEOOUT_HDMI_720X576I100_16X9 = 45, ///< HDMI VIDEO FORMAT IS 720X576 & INTERLACED 100FPS & 16:9
HD_VIDEOOUT_HDMI_1920X1080I120 = 46, ///< HDMI VIDEO FORMAT IS 1920X1080 & INTERLACED 120FPS
HD_VIDEOOUT_HDMI_1280X720P120 = 47, ///< HDMI VIDEO FORMAT IS 1280X720 & PROGRESSIVE 120FPS
HD_VIDEOOUT_HDMI_720X480P120 = 48, ///< HDMI VIDEO FORMAT IS 720X480 & PROGRESSIVE 120FPS
HD_VIDEOOUT_HDMI_720X480P120_16X9 = 49, ///< HDMI VIDEO FORMAT IS 720X480 & PROGRESSIVE 120FPS & 16:9
HD_VIDEOOUT_HDMI_720X480I120 = 50, ///< HDMI VIDEO FORMAT IS 720X480 & INTERLACED 120FPS
HD_VIDEOOUT_HDMI_720X480I120_16X9 = 51, ///< HDMI VIDEO FORMAT IS 720X480 & INTERLACED 120FPS & 16:9
HD_VIDEOOUT_HDMI_720X576P200 = 52, ///< HDMI VIDEO FORMAT IS 720X576 & PROGRESSIVE 200FPS
HD_VIDEOOUT_HDMI_720X576P200_16X9 = 53, ///< HDMI VIDEO FORMAT IS 720X576 & PROGRESSIVE 200FPS & 16:9
HD_VIDEOOUT_HDMI_720X576I200 = 54, ///< HDMI VIDEO FORMAT IS 720X576 & INTERLACED 200FPS
HD_VIDEOOUT_HDMI_720X576I200_16X9 = 55, ///< HDMI VIDEO FORMAT IS 720X576 & INTERLACED 200FPS & 16:9
HD_VIDEOOUT_HDMI_720X480P240 = 56, ///< HDMI VIDEO FORMAT IS 720X480 & PROGRESSIVE 240FPS
HD_VIDEOOUT_HDMI_720X480P240_16X9 = 57, ///< HDMI VIDEO FORMAT IS 720X480 & PROGRESSIVE 240FPS & 16:9
HD_VIDEOOUT_HDMI_720X480I240 = 58, ///< HDMI VIDEO FORMAT IS 720X480 & INTERLACED 240FPS
HD_VIDEOOUT_HDMI_720X480I240_16X9 = 59, ///< HDMI VIDEO FORMAT IS 720X480 & INTERLACED 240FPS & 16:9
HD_VIDEOOUT_HDMI_1440X900P60 = 60, ///< HDMI VIDEO FORMAT IS 1440X900 & PROGRESSIVE 60FPS
HD_VIDEOOUT_HDMI_1680X1050P60 = 61, ///< HDMI VIDEO FORMAT IS 1680X1050 & PROGRESSIVE 60FPS
HD_VIDEOOUT_HDMI_1920X1200P60 = 62, ///< HDMI VIDEO FORMAT IS 1920X1200 & PROGRESSIVE 60FPS
HD_VIDEOOUT_HDMI_1920X1200P75 = 63, ///< HDMI VIDEO FORMAT IS 1920X1200 & PROGRESSIVE 75FPS
HD_VIDEOOUT_HDMI_3840X2160P24 = 93, ///< HDMI VIDEO FORMAT IS 3840X2160 & PROGRESSIVE 24FPS
HD_VIDEOOUT_HDMI_3840X2160P25 = 94, ///< HDMI VIDEO FORMAT IS 3840X2160 & PROGRESSIVE 25FPS
HD_VIDEOOUT_HDMI_3840X2160P30 = 95, ///< HDMI VIDEO FORMAT IS 3840X2160 & PROGRESSIVE 30FPS
HD_VIDEOOUT_HDMI_4096X2160P24 = 98, ///< HDMI VIDEO FORMAT IS 4096X2160 & PROGRESSIVE 24FPS
HD_VIDEOOUT_HDMI_4096X2160P25 = 99, ///< HDMI VIDEO FORMAT IS 4096X2160 & PROGRESSIVE 25FPS
HD_VIDEOOUT_HDMI_4096X2160P30 = 100, ///< HDMI VIDEO FORMAT IS 4096X2160 & PROGRESSIVE 30FPS
// Non-std HDMI formats
HD_VIDEOOUT_HDMI_1024X768P60 = 35 + 256, ///< HDMI VIDEO FORMAT IS 1024X768 & Progressive 60fps
HD_VIDEOOUT_HDMI_1280X1024P30 = 36 + 256, ///< HDMI VIDEO FORMAT IS 1280X1024 & PROGRESSIVE 30FPS
HD_VIDEOOUT_HDMI_1280X1024P60 = 37 + 256, ///< HDMI VIDEO FORMAT IS 1280X1024 & Progressive 60fps
HD_VIDEOOUT_HDMI_1600X1200P30 = 38 + 256, ///< HDMI VIDEO FORMAT IS 1600X1200 & PROGRESSIVE 30FPS
HD_VIDEOOUT_HDMI_1600X1200P60 = 39 + 256, ///< HDMI VIDEO FORMAT IS 1600X1200 & Progressive 60fps
HD_VIDEOOUT_HDMI_2560X1440P30 = 40 + 256, ///< HDMI VIDEO FORMAT IS 2560X1440 & PROGRESSIVE 30FPS
HD_VIDEOOUT_HDMI_2560X1440P60 = 41 + 256, ///< HDMI VIDEO FORMAT IS 2560X1440 & Progressive 60fps
HD_VIDEOOUT_HDMI_NO_CHANGE = 0xFFFE, ///< HDMI VIDEO FORMAT USE CURRENT SETTING
HD_VIDEOOUT_HDMI_MAX,
ENUM_DUMMY4WORD(HD_VIDEOOUT_HDMI_ID)
} HD_VIDEOOUT_HDMI_ID;
typedef enum _HD_VIDEOOUT_VGA_ID {
HD_VIDEOOUT_VGA_720X480 = 0, ///< VGA VIDEO FORMAT IS 720X480
HD_VIDEOOUT_VGA_1024X768, ///< VGA VIDEO FORMAT IS 1024X768
HD_VIDEOOUT_VGA_1280X720, ///< VGA VIDEO FORMAT IS 1280X720
HD_VIDEOOUT_VGA_1280X1024, ///< VGA VIDEO FORMAT IS 1280X1024
HD_VIDEOOUT_VGA_1600X1200, ///< VGA VIDEO FORMAT IS 1600X1200
HD_VIDEOOUT_VGA_1920X1080, ///< VGA VIDEO FORMAT IS 1920X1080
HD_VIDEOOUT_VGA_1440X900, ///< VGA VIDEO FORMAT IS 1440X900
HD_VIDEOOUT_VGA_1680X1050, ///< VGA VIDEO FORMAT IS 1680X1050
HD_VIDEOOUT_VGA_1920X1200, ///< VGA VIDEO FORMAT IS 1920X1200
HD_VIDEOOUT_VGA_MAX,
ENUM_DUMMY4WORD(HD_VIDEOOUT_VGA_ID)
} HD_VIDEOOUT_VGA_ID;
typedef enum _HD_VIDEOOUT_CVBS_ID {
HD_VIDEOOUT_CVBS_NTSC = 0, ///< CVBS MODE IS NTSC
HD_VIDEOOUT_CVBS_PAL = 1, ///< CVBS MODE IS NTSC
HD_VIDEOOUT_CVBS_NTSC_SD = 2, ///< CVBS MODE IS SD NTSC
HD_VIDEOOUT_CVBS_PAL_SD = 3, ///< CVBS MODE IS SD PAL
HD_VIDEOOUT_CVBS_MAX,
ENUM_DUMMY4WORD(HD_VIDEOOUT_CVBS_ID)
} HD_VIDEOOUT_CVBS_ID;
typedef struct _HD_VIDEOOUT_MODE {
HD_COMMON_VIDEO_OUT_TYPE output_type; ///< select lcd output device
HD_VIDEOOUT_INPUT_DIM input_dim; ///< set input dim
union {
HD_VIDEOOUT_LCD_ID lcd; ///< set lcd output resolution
HD_VIDEOOUT_HDMI_ID hdmi; ///< set hdmi output resolution
HD_VIDEOOUT_VGA_ID vga; ///< set vga output resolution
HD_VIDEOOUT_CVBS_ID cvbs; ///< set cvbs output resolution
} output_mode;
} HD_VIDEOOUT_MODE;
typedef struct _HD_VIDEOOUT_DEVNVR_CONFIG {
HD_VIDEOOUT_MODE mode; ///< set lcd mode
int homology; ///< only suitable to lcd210. When it is set, it will not register to videograph
int chip_state; ///< only suitable to lcd210. to enable/disable lcd200_0 hw
struct {
int max_w; ///< fb max width
int max_h; ///< fb max height
int max_bpp; ///< fb max bit per pixel
int gui_rld_enable; ///< rld enabled
int ddr_id; ///< fb buf ddr id
unsigned int buf_paddr; ///< fb buffer physical address
unsigned int buf_len; ///< fb buffer length
unsigned int rle_buf_paddr; ///< rle buffer physical address, only valid for gui compress
unsigned int rle_buf_len; ///< rle buffer length, only valid for gui compress
} plane[3];
} HD_VIDEOOUT_DEVNVR_CONFIG;
typedef enum _HD_VIDEOOUT_INFUNC {
HD_VIDEOOUT_INFUNC_ONEBUF = 0x00000002, ///< enable one-buffer from vdoprc
ENUM_DUMMY4WORD(HD_VIDEOOUT_INFUNC)
} HD_VIDEOOUT_INFUNC;
typedef struct _HD_VIDEOOUT_DEVIPC_CONFIG {
} HD_VIDEOOUT_DEVIPC_CONFIG;
typedef struct _HD_VIDEOOUT_CONFIG {
union {
HD_VIDEOOUT_DEVNVR_CONFIG devnvr_cfg; ///< device config
HD_VIDEOOUT_DEVIPC_CONFIG devipc_cfg; ///< device config
};
} HD_VIDEOOUT_DEV_CONFIG;
/**
@name func config
*/
typedef struct _HD_VIDEOOUT_FUNC_CONFIG {
UINT32 ddr_id; ///< DDR ID
HD_VIDEOOUT_INFUNC in_func; ///< additional function of in (bit-wise mask)
} HD_VIDEOOUT_FUNC_CONFIG;
/********************************************************************
TYPE DEFINITION
********************************************************************/
/**
@name HD_VIDEOOUT capability
*/
typedef enum HD_VIDEOOUT_INCAPS {
HD_VIDEOOUT_INCAPS_ONEBUF = 0x02000000, ///< caps of HD_VIDEOOUT_INFUNC_ONEBUF
ENUM_DUMMY4WORD(HD_VIDEOOUT_INCAPS)
} HD_VIDEOOUT_INCAPS;
typedef enum _HD_VIDEOOUT_CAPS {
HD_VIDEOOUT_CAPS_CVBS = 0x00000100, ///< support cvbs display
HD_VIDEOOUT_CAPS_VGA = 0x00000200, ///< support vga display
HD_VIDEOOUT_CAPS_HDMI = 0x00000400, ///< support hdmi display
HD_VIDEOOUT_CAPS_LCD = 0x00000800, ///< support lcd display
ENUM_DUMMY4WORD(HD_VIDEOOUT_CAPS)
} HD_VIDEOOUT_CAPS;
typedef enum _HD_FB_CAPS {
HD_FB_CAPS_YUV422 = 0x00000001, ///< support YUV422 format
HD_FB_CAPS_YUV420 = 0x00000002, ///< support YUV420 format
HD_FB_CAPS_INDEX_1 = 0x00000010, ///< support INDEX 1bit format
HD_FB_CAPS_INDEX_2 = 0x00000020, ///< support INDEX 2bit format
HD_FB_CAPS_INDEX_4 = 0x00000040, ///< support INDEX 4bit format
HD_FB_CAPS_INDEX_8 = 0x00000080, ///< support INDEX 8bit format
HD_FB_CAPS_ARGB_1555 = 0x00000100, ///< support ARGB 1555 format
HD_FB_CAPS_ARGB_4444 = 0x00000200, ///< support ARGB 4444 format
HD_FB_CAPS_ARGB_8888 = 0x00000400, ///< support ARGB 8888 format
HD_FB_CAPS_ARGB_8565 = 0x00000800, ///< support ARGB 8565 format
HD_FB_CAPS_RGBA_5551 = 0x00001000, ///< support RGBA 5551 format
HD_FB_CAPS_RGB_565 = 0x00002000, ///< support RGB 565 format
ENUM_DUMMY4WORD(HD_FB_CAPS)
} HD_FB_CAPS;
typedef struct _HD_VIDEOOUT_SYSCAPS {
HD_DAL dev_id; ///< device id
UINT32 chip_id; ///< chip id of this device
UINT32 max_in_count; ///< max count of input of this device
UINT32 max_out_count; ///< max count of output of this device
UINT32 max_fb_count; ///< max count of fb of this device
HD_DEVICE_CAPS dev_caps; ///< support value:HD_VIDEOOUT_CAPS|HD_DEVICE_CAPS
HD_VIDEO_CAPS in_caps[HD_VIDEOOUT_MAX_IN]; ///< capability of input of HD_VIDEO_CAPS and HD_VIDEOOUT_INCAPS
HD_VIDEO_CAPS out_caps[HD_VIDEOOUT_MAX_OUT]; ///< capability of output
UINT32 fb_caps[HD_FB_MAX]; ///< capability of fb, support value:HD_FB_CAPS
HD_DIM output_dim; ///< output dimension width/height
HD_DIM input_dim; ///< input dimension width/height
UINT32 fps; ///< display framw rate
UINT32 max_scale_up_w; ///< max width scling up factor
UINT32 max_scale_up_h; ///< max height scling up factor
UINT32 max_scale_down_w; ///< max width scaling down factor
UINT32 max_scale_down_h; ///< max height scaling down factor
UINT32 max_out_stamp; ///< max output stamp
UINT32 max_out_stamp_ex; ///< max output stamp_ex
UINT32 max_out_mask; ///< max output mask
UINT32 max_out_mask_ex; ///< max output mask_ex
} HD_VIDEOOUT_SYSCAPS;
typedef enum _HD_FB_ID {
HD_FB0 = 0, ///< frame buf id 0
HD_FB1, ///< frame buf id 1
HD_FB2, ///< frame buf id 2
HD_FB3, ///< frame buf id 3
ENUM_DUMMY4WORD(HD_FB_ID)
} HD_FB_ID;
typedef enum _CLEAR_WINDOW_MODE{
HD_ACTIVE_BY_APPLY = 0, ///< clear videoout win input data after set HD_VIDEOOUT_PARAM_MODE
HD_ACTIVE_IMMEDIATELY, ///< clear videoout win input data immediately
} CLEAR_WINDOW_MODE;
typedef struct _HD_VIDEOOUT_CLEAR_WIN {
HD_DIM input_dim; ///< pattern buf dim, minimun input dim: 64x32
HD_VIDEO_PXLFMT in_fmt; ///< pattern fmt
UINT8 *buf; ///< pattern buf
HD_URECT output_rect; ///< clear win region
CLEAR_WINDOW_MODE mode; ///< clear win mode
} HD_VIDEOOUT_CLEAR_WIN;
typedef struct _HD_FB_FMT {
HD_FB_ID fb_id; ///< select fb layer
HD_VIDEO_PXLFMT fmt; ///< set fb input fmt
} HD_FB_FMT;
typedef struct _HD_FB_ATTR {
HD_FB_ID fb_id; ///< select fb layer
UINT8 alpha_blend; ///< 0~255,except ARBG format,ARBG format would refer pixel alpha,lcd0:support fb0~2,lcd_1/lcd_2:fb0~1
UINT8 alpha_1555; ///< 0~255,only for ARBG1555 format,the pixel alpha 1 would refer the value
BOOL colorkey_en; ///< 0:disable/1:enable
UINT16 r_ckey; ///< r would be format r,ex:ARGB444 format Red:0xF00
UINT16 g_ckey; ///< g would be format g,ex:ARGB444 format Green:0x0F0
UINT16 b_ckey; ///< b would be format b,ex:ARGB444 format Blue:0x00F
} HD_FB_ATTR;
typedef struct _HD_FB_ENABLE {
HD_FB_ID fb_id; ///< select fb layer
BOOL enable; ///< 0:disable, 1:enable
} HD_FB_ENABLE;
typedef struct _HD_FB_LAYER_ORDER {
HD_FB_ID fb_id; ///< select fb layer
UINT8 fb_to_plane_num; ///< 0~2
} HD_FB_LAYER_ORDER;
typedef struct _HD_FB_DIM {
HD_FB_ID fb_id; ///< select fb layer
HD_DIM input_dim; ///< set fb in dim
HD_URECT output_rect; ///< set fb out dim and x/y
} HD_FB_DIM;
typedef struct _HD_FB_PALETTE_TBL {
HD_FB_ID fb_id; ///< select fb layer
UINT16 table_size; ///< palette size
UINT32 *p_table; ///< palette table value
} HD_FB_PALETTE_TBL;
#define HD_VIDEOOUT_PALETTE_TABLE HD_FB_PALETTE_TBL
typedef enum _HD_WIN_LAYER {
HD_LAYER1 = 0, ///< 1st layer (background, first draw, lowest)
HD_LAYER2 = 1, ///< 2nd layer
HD_LAYER3 = 2, ///< 3rd layer
HD_LAYER4 = 3, ///< 4th layer
HD_LAYER5 = 4, ///< 5th layer
HD_LAYER6 = 5, ///< 6th layer
HD_LAYER7 = 6, ///< 7th layer
HD_LAYER8 = 7, ///< 8th layer (last draw, on the top)
HD_WIN_LAYER_MAX,
ENUM_DUMMY4WORD(HD_WIN_LAYER)
} HD_WIN_LAYER;
typedef struct _HD_VIDEOOUT_WIN_ATTR {
BOOL visible; ///< decide this win to show
HD_URECT rect; ///< set lcd input port dim
HD_WIN_LAYER layer;
} HD_VIDEOOUT_WIN_ATTR;
typedef struct _HD_VIDEOOUT_WIN_PSR_ATTR {
BOOL visible; ///< decide the Picture-Second-Region's win to show
HD_URECT rect; ///< set lcd input port dim
} HD_VIDEOOUT_WIN_PSR_ATTR;
typedef struct _HD_VIDEOOUT_IN {
HD_DIM dim; ///< dimension
HD_VIDEO_PXLFMT pxlfmt; ///< format
HD_VIDEO_DIR dir; ///< direction like mirror/flip
} HD_VIDEOOUT_IN;
typedef struct {
HD_VIDEOOUT_HDMI_ID video_id[32]; ///< supported HDMI EDID.
UINT32 len; ///< Number of video formats supported by the HDMI.
} HD_VIDEOOUT_HDMI_ABILITY;
typedef enum _HD_VIDEOOUT_PARAM_ID {
///Common Start:all members of struct //
HD_VIDEOOUT_PARAM_DEVCOUNT = 0, ///< support get with ctrl path, using HD_DEVCOUNT struct
HD_VIDEOOUT_PARAM_SYSCAPS, ///< support get with ctrl path, using HD_VIDEOOUT_SYSCAPS struct
HD_VIDEOOUT_PARAM_DEV_CONFIG, ///< support set with ctrl path, using HD_VIDEOOUT_DEV_CONFIG struct
HD_VIDEOOUT_PARAM_MODE, ///< support get/set with ctrl path, using HD_VIDEOOUT_MODE struct
HD_VIDEOOUT_PARAM_FB_PALETTE_TABLE, ///< support get/set with ctrl path, using HD_FB_PALETTE_TBL struct
HD_VIDEOOUT_PARAM_CLEAR_WIN, ///< support set with ctrl path, using HD_VIDEOOUT_CLEAR_WIN struct, set active
HD_VIDEOOUT_PARAM_IN, ///< support get/set with i path, using HD_VIDEOOUT_IN struct
HD_VIDEOOUT_PARAM_IN_WIN_ATTR, ///< support get/set with i path, using HD_VIDEOOUT_WIN_ATTR struct
HD_VIDEOOUT_PARAM_IN_WIN_PSR_ATTR, ///< support get/set with i path, using HD_VIDEOOUT_WIN_PSR_ATTR struct
HD_VIDEOOUT_PARAM_WRITEBACK_BUF, ///< support get/set with ctrl path, using HD_VIDEO_FRAME struct
HD_VIDEOOUT_PARAM_FB_FMT, ///< support get/set with ctrl path, using HD_FB_FMT struct
HD_VIDEOOUT_PARAM_FB_ATTR, ///< support get/set with ctrl path, using HD_FB_ATTR struct
HD_VIDEOOUT_PARAM_FB_ENABLE, ///< support get/set with ctrl path, using HD_FB_ENABLE struct
HD_VIDEOOUT_PARAM_FB_LAYER_ORDER, ///< support get/set with ctrl path, using HD_FB_LAYER_ORDER struct
HD_VIDEOOUT_PARAM_HDMI_ABILITY, ///< support get with ctrl path, using HD_VIDEOOUT_HDMI_ABILITY struct
HD_VIDEOOUT_PARAM_OUT_STAMP_BUF, ///< support get/set with o/stamp path, using HD_OSG_STAMP_BUF struct (stamp buffer parameter)
HD_VIDEOOUT_PARAM_OUT_STAMP_IMG, ///< support get/set with o/stamp path, using HD_OSG_STAMP_IMG struct (stamp image parameter)
HD_VIDEOOUT_PARAM_OUT_STAMP_ATTR, ///< support get/set with o/stamp path, using HD_OSG_STAMP_ATTR struct (stamp display attribute)
HD_VIDEOOUT_PARAM_OUT_MASK_ATTR, ///< support get/set with o/mask path, using HD_OSG_MASK_ATTR struct (mask display attribute)
HD_VIDEOOUT_PARAM_OUT_MOSAIC_ATTR, ///< support get/set with o/mask path, using HD_OSG_MOSAIC_ATTR struct (mosaic display attribute)
HD_VIDEOOUT_PARAM_FB_DIM, ///< support get/set with ctrl path, using HD_FB_DIM struct
HD_VIDEOOUT_PARAM_OUT_PALETTE_TABLE, ///< support get/set with o path, using HD_PALETTE_TBL struct
HD_VIDEOOUT_PARAM_FUNC_CONFIG, ///< support get/set with i/o path, using HD_VIDEOOUT_FUNC_CONFIG struct (path func config)
///Common End//
HD_VIDEOOUT_PARAM_MAX,
ENUM_DUMMY4WORD(HD_VIDEOOUT_PARAM_ID)
} HD_VIDEOOUT_PARAM_ID;
#define HD_VIDEOOUT_PARAM_PALETTE_TABLE HD_VIDEOOUT_PARAM_FB_PALETTE_TABLE
/********************************************************************
EXTERN VARIABLES & FUNCTION PROTOTYPES DECLARATIONS
********************************************************************/
HD_RESULT hd_videoout_init(VOID);
HD_RESULT hd_videoout_bind(HD_OUT_ID out_id, HD_IN_ID dest_in_id);
HD_RESULT hd_videoout_unbind(HD_OUT_ID out_id);
HD_RESULT hd_videoout_open(HD_IN_ID in_id, HD_OUT_ID out_id, HD_PATH_ID *p_path_id);
HD_RESULT hd_videoout_start(HD_PATH_ID path_id);
HD_RESULT hd_videoout_stop(HD_PATH_ID path_id);
HD_RESULT hd_videoout_start_list(HD_PATH_ID *path_id, UINT num);
HD_RESULT hd_videoout_stop_list(HD_PATH_ID *path_id, UINT num);
HD_RESULT hd_videoout_get(HD_PATH_ID path_id, HD_VIDEOOUT_PARAM_ID id, VOID *param);
HD_RESULT hd_videoout_set(HD_PATH_ID path_id, HD_VIDEOOUT_PARAM_ID id, VOID *param);
HD_RESULT hd_videoout_push_in_buf(HD_PATH_ID path_id, HD_VIDEO_FRAME *p_in_video_frame, HD_VIDEO_FRAME *p_user_out_video_frame, INT32 wait_ms);
HD_RESULT hd_videoout_pull_out_buf(HD_PATH_ID path_id, HD_VIDEO_FRAME *p_video_frame, INT32 wait_ms);
HD_RESULT hd_videoout_release_out_buf(HD_PATH_ID path_id, HD_VIDEO_FRAME *p_video_frame);
HD_RESULT hd_videoout_close(HD_PATH_ID path_id);
HD_RESULT hd_videoout_uninit(VOID);
#define ARGB8565_A_ADDR(rgb_addr, w, h) ALIGN_CEIL_16(rgb_addr + w*2*h) //RGB565 buf size = (line offset * height)
#endif