437 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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
 | |
| 
 | 
