10.1_demo/extern/qlibquammapi/include/display/qua_mm_display.h

445 lines
14 KiB
C

/*******************************************************************************************
# Copyright (c) 2023~2024 Quaming Intelligent Technology Co., Ltd.
# All Rights Reserved.
# Confidential and Proprietary - Quaming Intelligent Technology Co., Ltd.
#*******************************************************************************************/
#ifndef __QUA_MM_DISPLAY_MODULE_H__
#define __QUA_MM_DISPLAY_MODULE_H__
#include "common/qua_mm_common.h"
#include "common/qua_mm_video_common_type.h"
#include "utils/qua_debug_utils.h"
#define QUA_MM_DISP_DEV_VO "display.vo"
#define QUA_MM_DISP_DEV_FB "display.fb"
#define QUA_MM_DISP_DEV_VO_SPI "display.vo.spi"
#define QUA_MM_DISP_DEV_FB_SPI "display.fb.spi"
#define QUA_VO_INTF_CVBS (0x01L<<0)
#define QUA_VO_INTF_YPBPR (0x01L<<1)
#define QUA_VO_INTF_VGA (0x01L<<2)
#define QUA_VO_INTF_BT656 (0x01L<<3)
#define QUA_VO_INTF_BT1120 (0x01L<<4)
#define QUA_VO_INTF_HDMI (0x01L<<5)
#define QUA_VO_INTF_LCD (0x01L<<6)
#define QUA_VO_INTF_BT656_H (0x01L<<7)
#define QUA_VO_INTF_BT656_L (0x01L<<8)
#define QUA_VO_INTF_AHD (0x01L<<9)
#define QUA_FB_ACTIVATE_NOW 0
#define QUA_FB_ACTIVATE_NXTOPEN 1
#define QUA_FB_ACTIVATE_TEST 2
#define QUA_FB_ACTIVATE_MASK 15
#define QUA_FB_ACTIVATE_VBL 16
#define QUA_FB_CHANGE_CMAP_VBL 32
#define QUA_FB_ACTIVATE_ALL 64
#define QUA_FB_ACTIVATE_FORCE 128
#define QUA_FB_ACTIVATE_INV_MODE 256
typedef QUA_S32 QUA_VO_INTF_TYPE;
typedef QUA_S32 QUA_VO_DEV;
typedef QUA_S32 QUA_VO_LAYER;
typedef QUA_S32 QUA_VO_CHN;
typedef enum qua_display_device_type {
QUA_DISPLAY_DEVICE_TYPE_NORMAL = 0,
QUA_DISPLAY_DEVICE_TYPE_SPI,
QUA_DISPLAY_DEVICE_TYPE_NUM,
} qua_display_device_type_t;
typedef enum qua_vo_intf_sync {
QUA_VO_OUTPUT_PAL = 0,
QUA_VO_OUTPUT_NTSC,
QUA_VO_OUTPUT_960H_PAL,
QUA_VO_OUTPUT_960H_NTSC,
QUA_VO_OUTPUT_1080P24,
QUA_VO_OUTPUT_1080P25,
QUA_VO_OUTPUT_1080P30,
QUA_VO_OUTPUT_720P50,
QUA_VO_OUTPUT_720P60,
QUA_VO_OUTPUT_1080I50,
QUA_VO_OUTPUT_1080I60,
QUA_VO_OUTPUT_1080P50,
QUA_VO_OUTPUT_1080P60,
QUA_VO_OUTPUT_576P50,
QUA_VO_OUTPUT_480P60,
QUA_VO_OUTPUT_640x480_60,
QUA_VO_OUTPUT_800x480_60,
QUA_VO_OUTPUT_800x600_60,
QUA_VO_OUTPUT_1024x768_60,
QUA_VO_OUTPUT_1024x600_60,
QUA_VO_OUTPUT_1280x1024_60,
QUA_VO_OUTPUT_1366x768_60,
QUA_VO_OUTPUT_1440x900_60,
QUA_VO_OUTPUT_1280x800_60,
QUA_VO_OUTPUT_1680x1050_60,
QUA_VO_OUTPUT_1920x2160_30,
QUA_VO_OUTPUT_1600x1200_60,
QUA_VO_OUTPUT_1920x1200_60,
QUA_VO_OUTPUT_2560x1440_30,
QUA_VO_OUTPUT_2560x1440_60,
QUA_VO_OUTPUT_2560x1600_60,
QUA_VO_OUTPUT_3840x2160_25,
QUA_VO_OUTPUT_3840x2160_30,
QUA_VO_OUTPUT_3840x2160_50,
QUA_VO_OUTPUT_3840x2160_60,
QUA_VO_OUTPUT_4096x2160_30,
QUA_VO_OUTPUT_7680x4320_30_FRL_8G,
QUA_VO_OUTPUT_USER,
QUA_VO_OUTPUT_800x1280_60,
QUA_VO_OUTPUT_240x320_60,
QUA_VO_OUTPUT_480x854_60,
QUA_VO_OUTPUT_1200x576_50,
QUA_VO_OUTPUT_3840x2160_15,
QUA_VO_OUTPUT_1280x960_60,
QUA_VO_OUTPUT_720x540_60,
QUA_VO_OUTPUT_960x1280_60,
QUA_VO_OUTPUT_720x575_50,
QUA_VO_OUTPUT_720x1280_60,
QUA_VO_OUTPUT_720P25,
QUA_VO_OUTPUT_720P30,
QUA_VO_OUTPUT_1080x1920_60,
QUA_VO_OUTPUT_320x240_30,
QUA_VO_OUTPUT_320x480_60,
QUA_VO_OUTPUT_480x800_60,
QUA_VO_OUTPUT_240x240_30,
QUA_VO_OUTPUT_BUTT
}qua_vo_intf_sync_t;
typedef enum qua_hdmi_format {
QUA_HDMI_FORMAT_RGB888 = 0,
QUA_HDMI_FORMAT_YUV444,
QUA_HDMI_FORMAT_EXT_YUV422_8BIT,
QUA_HDMI_FORMAT_EXT_YUV422_16BIT,
QUA_HDMI_FORMAT_EXT_YUV444_24BIT,
QUA_HDMI_FORMAT_BT_1120,
QUA_HDMI_FORMAT_NUM,
} qua_hdmi_format_t;
typedef enum qua_vo_csc_matrix {
QUA_VO_CSC_MATRIX_IDENTITY = 0,
QUA_VO_CSC_MATRIX_BT601_TO_BT709,
QUA_VO_CSC_MATRIX_BT709_TO_BT601,
QUA_VO_CSC_MATRIX_BT601_TO_RGB_PC,
QUA_VO_CSC_MATRIX_BT709_TO_RGB_PC,
QUA_VO_CSC_MATRIX_RGB_TO_BT601_PC,
QUA_VO_CSC_MATRIX_RGB_TO_BT709_PC,
QUA_VO_CSC_MATRIX_BUTT,
} qua_vo_csc_matrix_t;
typedef enum qua_fb_dev {
QUA_FB_DEV0 = 0,
QUA_FB_DEV1,
QUA_FB_DEV2,
QUA_FB_DEV3,
QUA_FB_DEV4,
QUA_FB_DEV5,
QUA_FB_DEV6,
QUA_FB_DEV7,
QUA_FBDEV_BUTT
} qua_fb_dev_t;
typedef enum qua_fb_buffer_mode
{
FB_BUF_MODE_DOUBLE = 0,
FB_BUF_MODE_ONE,
FB_BUF_MODE_NONE,
FB_BUF_MODE_DOUBLE_IMMEDIATE,
FB_BUF_MODE_BUTT
} qua_fb_buffer_mode_t;
typedef enum qua_fb_layer_mask
{
FB_LAYER_MASK_BUFMODE = 0x1,
FB_LAYER_MASK_ANTIFLICKER_MODE = 0x2,
FB_LAYER_MASK_POS = 0x4,
FB_LAYER_MASK_CANVASSIZE = 0x8,
FB_LAYER_MASK_DISPSIZE = 0x10,
FB_LAYER_MASK_SCREENSIZE = 0x20,
FB_LAYER_MASK_BMUL = 0x40,
FB_LAYER_MASK_BUTT
} qua_fb_layer_mask_t;
typedef enum qua_fb_antiflicker_level
{
FB_ANTIFLICKER_NONE = 0,
FB_ANTIFLICKER_LOW,
FB_ANTIFLICKER_MIDDLE,
FB_ANTIFLICKER_HIGH,
FB_ANTIFLICKER_AUTO,
FB_ANTIFLICKER_BUTT
} qua_fb_antiflicker_level_t;
typedef struct qua_vo_sync_info {
QUA_BOOL synm;
QUA_BOOL iop;
QUA_U8 intfb;
QUA_U16 vact;
QUA_U16 vbb;
QUA_U16 vfb;
QUA_U16 hact;
QUA_U16 hbb;
QUA_U16 hfb;
QUA_U16 hmid;
QUA_U16 bvact;
QUA_U16 bvbb;
QUA_U16 bvfb;
QUA_U16 hpw;
QUA_U16 vpw;
QUA_BOOL idv;
QUA_BOOL ihs;
QUA_BOOL ivs;
QUA_U32 clk;
} qua_vo_sync_info_t;
typedef struct qua_user_sync_info {
QUA_U16 width;
QUA_U16 height;
QUA_U16 framerate;
QUA_U8 progressive;
QUA_U16 Hfront;
QUA_U16 Hsync;
QUA_U16 Hback;
QUA_U16 Hpol;
QUA_U16 Vfront;
QUA_U16 Vsync;
QUA_U16 Vback;
QUA_U16 Vpol;
} qua_user_sync_info_t;
typedef struct qua_vo_pub_attr {
QUA_U32 bg_color;
QUA_VO_INTF_TYPE intf_type;
qua_vo_intf_sync_t intf_sync;
qua_vo_sync_info_t sync_info;
qua_user_sync_info_t user_info;
} qua_vo_pub_attr_t;
typedef struct qua_vo_video_layer_attr {
qua_rect_t disp_rect;
qua_size_t image_size;
QUA_U32 disp_frmrt;
qua_pixel_fmt_t pix_format;
QUA_BOOL double_frame;
QUA_BOOL cluster_mode;
} qua_vo_video_layer_attr_t;
typedef struct qua_vo_compress_attr {
QUA_BOOL support_compress;
} qua_vo_compress_attr_t;
typedef struct qua_vo_hdmi_fmt {
qua_hdmi_format_t hdmi_fmt;
} qua_vo_hdmi_fmt_t;
typedef struct qua_vo_csc {
qua_vo_csc_matrix_t csc_matrix;
QUA_U32 luma;
QUA_U32 contrast;
QUA_U32 hue;
QUA_U32 saturation;
} qua_vo_csc_t;
typedef struct qua_vo_chn_attr {
QUA_U32 priority;
qua_rect_t rect;
QUA_BOOL deflicker;
} qua_vo_chn_attr_t;
typedef struct qua_aspect_radio_info {
qua_aspect_ratio_t mode;
QUA_U32 bg_color;
qua_rect_t video_rect;
} qua_aspect_radio_info_t;
typedef struct qua_vo_chn_param_t {
qua_aspect_radio_info_t aspect_ratio;
} qua_vo_chn_param_t;
typedef struct qua_fb_colorkey {
QUA_BOOL key_enable;
QUA_U32 key_value;
} qua_fb_colorkey_t;
typedef struct qua_fb_alpha {
QUA_BOOL alpha_enable;
QUA_BOOL alpha_channel;
QUA_U8 alpha0;
QUA_U8 alpha1;
QUA_U8 global_alpha;
QUA_U8 reserved;
} qua_fb_alpha_t;
typedef struct qua_fb_fix_screeninfo {
char id[16];
QUA_ULONG smem_start;
QUA_U32 smem_len;
QUA_U32 type;
QUA_U32 type_aux;
QUA_U32 visual;
QUA_U16 xpanstep;
QUA_U16 ypanstep;
QUA_U16 ywrapstep;
QUA_U32 line_length;
QUA_ULONG mmio_start;
QUA_U32 mmio_len;
QUA_U32 accel;
QUA_U16 capabilities;
QUA_U16 reserved[2];
} qua_fb_fix_screeninfo_t;
typedef struct qua_fb_bitfield {
QUA_U32 offset;
QUA_U32 length;
QUA_U32 msb_right;
} qua_fb_bitfield_t;
typedef struct qua_fb_var_screeninfo {
QUA_U32 xres;
QUA_U32 yres;
QUA_U32 xres_virtual;
QUA_U32 yres_virtual;
QUA_U32 xoffset;
QUA_U32 yoffset;
QUA_U32 bits_per_pixel;
QUA_U32 grayscale;
qua_fb_bitfield_t red;
qua_fb_bitfield_t green;
qua_fb_bitfield_t blue;
qua_fb_bitfield_t transp;
QUA_U32 nonstd;
QUA_U32 activate;
QUA_U32 height;
QUA_U32 width;
QUA_U32 accel_flags;
QUA_U32 pixclock;
QUA_U32 left_margin;
QUA_U32 right_margin;
QUA_U32 upper_margin;
QUA_U32 lower_margin;
QUA_U32 hsync_len;
QUA_U32 vsync_len;
QUA_U32 sync;
QUA_U32 vmode;
QUA_U32 rotate;
QUA_U32 colorspace;
QUA_U32 reserved[4];
} qua_fb_var_screeninfo_t;
typedef struct qua_fb_layer_info {
qua_fb_buffer_mode_t buf_mode;
qua_fb_antiflicker_level_t antiflicker_level;
QUA_S32 origion_x;
QUA_S32 origion_y;
QUA_S32 canvas_width;
QUA_S32 canvas_height;
QUA_U32 display_width;
QUA_U32 display_height;
QUA_U32 screen_width;
QUA_U32 screen_height;
QUA_BOOL pre_mul;
QUA_U32 mask;
QUA_U32 buf_len;
QUA_U32 buf_phys;
} qua_fb_layer_info_t;
typedef struct qua_mm_display_module_t {
struct qua_mm_module_t parent;
} qua_mm_display_module_t;
typedef struct qua_mm_vo_device_t {
struct qua_mm_device_t parent;
QUA_VO_DEV dev_num;
QUA_S32 (*set_public_attr)(QUA_VO_DEV dev_num, const qua_vo_pub_attr_t *attr);
QUA_S32 (*get_public_attr)(QUA_VO_DEV dev_num, qua_vo_pub_attr_t *attr);
QUA_S32 (*enable)(QUA_VO_DEV dev_num);
QUA_S32 (*disable)(QUA_VO_DEV dev_num);
QUA_S32 (*set_video_layer_attr)(QUA_VO_LAYER layer, const qua_vo_video_layer_attr_t *layer_attr,
const qua_vo_compress_attr_t *compress_attr);
QUA_S32 (*get_video_layer_attr)(QUA_VO_LAYER layer, qua_vo_video_layer_attr_t *layer_attr,
qua_vo_compress_attr_t *compress_attr);
QUA_S32 (*enable_video_layer)(QUA_VO_LAYER layer);
QUA_S32 (*disable_video_layer)(QUA_VO_LAYER layer);
QUA_S32 (*bind_video_layer)(QUA_VO_LAYER layer, QUA_VO_DEV dev_num);
QUA_S32 (*unbind_video_layer)(QUA_VO_LAYER layer, QUA_VO_DEV dev_num);
QUA_S32 (*set_video_layer_priority)(QUA_VO_LAYER layer, QUA_U32 priority);
QUA_S32 (*set_video_disp_buflen)(QUA_VO_LAYER layer, QUA_U32 buflen);
QUA_S32 (*set_hdmi_fmt)(QUA_VO_DEV dev_num, const qua_vo_hdmi_fmt_t *hdmi_fmt);
QUA_S32 (*set_csc_matrix)(QUA_VO_LAYER layer, const qua_vo_csc_t *csc);
QUA_S32 (*get_csc_matrix)(QUA_VO_LAYER layer, qua_vo_csc_t *csc);
QUA_S32 (*get_display_size)(QUA_VO_DEV dev_num, qua_user_sync_info_t *user_info);
QUA_S32 (*suspend_lcm)(QUA_VO_DEV dev_num);
QUA_S32 (*resume_lcm)(QUA_VO_DEV dev_num);
} qua_mm_vo_device_t;
typedef struct qua_mm_vo_channel_t {
struct qua_mm_channel_t parent;
QUA_VO_CHN chn_id;
QUA_S32 (*set_chn_attr)(QUA_VO_LAYER layer, QUA_VO_CHN chn, const qua_vo_chn_attr_t *chn_attr);
QUA_S32 (*get_chn_attr)(QUA_VO_LAYER layer, QUA_VO_CHN chn, qua_vo_chn_attr_t *chn_attr);
QUA_S32 (*enable_chn)(QUA_VO_LAYER layer, QUA_VO_CHN chn);
QUA_S32 (*disable_chn)(QUA_VO_LAYER layer, QUA_VO_CHN chn);
QUA_S32 (*set_chn_param)(QUA_VO_LAYER layer, QUA_VO_CHN chn, const qua_vo_chn_param_t *param);
QUA_S32 (*get_chn_param)(QUA_VO_LAYER layer, QUA_VO_CHN chn, qua_vo_chn_param_t *param);
QUA_S32 (*set_chn_disp_pos)(QUA_VO_LAYER layer, QUA_VO_CHN chn, const qua_point_t *pos);
QUA_S32 (*get_chn_disp_pos)(QUA_VO_LAYER layer, QUA_VO_CHN chn, qua_point_t *pos);
QUA_S32 (*set_chn_frame_rate)(QUA_VO_LAYER layer, QUA_VO_CHN chn, QUA_S32 frame_rate);
QUA_S32 (*get_chn_frame_rate)(QUA_VO_LAYER layer, QUA_VO_CHN chn, QUA_S32 *frame_rate);
QUA_S32 (*get_chn_frame)(QUA_VO_LAYER layer, QUA_VO_CHN chn, qua_video_frame_info_t *frame, QUA_S32 m_sec);
QUA_S32 (*release_chn_frame)(QUA_VO_LAYER layer, QUA_VO_CHN chn, const qua_video_frame_info_t *frame);
QUA_S32 (*show_chn)(QUA_VO_LAYER layer, QUA_VO_CHN chn);
QUA_S32 (*hide_chn)(QUA_VO_LAYER layer, QUA_VO_CHN chn);
QUA_S32 (*get_chn_pts)(QUA_VO_LAYER layer, QUA_VO_CHN chn, QUA_U64 *chn_pts);
QUA_S32 (*send_frame)(QUA_VO_LAYER layer, QUA_VO_CHN chn, const qua_video_frame_info_t *frame, QUA_S32 m_sec);
QUA_S32 (*clear_chn_buffer)(QUA_VO_LAYER layer, QUA_VO_CHN chn, QUA_BOOL clear_all);
QUA_S32 (*fill_chn)(QUA_VO_LAYER layer, QUA_VO_CHN chn, QUA_U32 rgb);
QUA_S32 (*set_chn_crop)(QUA_VO_LAYER layer, QUA_VO_CHN chn, const qua_rect_t *rect);
} qua_mm_vo_channel_t;
typedef struct qua_mm_fb_device {
struct qua_mm_device_t parent;
qua_fb_dev_t dev_num;
QUA_S32 fd;
qua_debug_fps_t fps_debug;
QUA_S32 (*show)(struct qua_mm_fb_device *dev, QUA_BOOL is_show);
QUA_S32 (*compress)(struct qua_mm_fb_device *dev, QUA_BOOL is_compress);
QUA_S32 (*get_origin)(struct qua_mm_fb_device *dev, qua_point_t *pos);
QUA_S32 (*put_origin)(struct qua_mm_fb_device *dev, const qua_point_t *pos);
QUA_S32 (*get_size)(struct qua_mm_fb_device *dev, qua_size_t *screen_size);
QUA_S32 (*put_size)(struct qua_mm_fb_device *dev, const qua_size_t *screen_size);
QUA_S32 (*get_colorkey)(struct qua_mm_fb_device *dev, qua_fb_colorkey_t *colorkey);
QUA_S32 (*put_colorkey)(struct qua_mm_fb_device *dev, const qua_fb_colorkey_t *colorkey);
QUA_S32 (*get_alpha)(struct qua_mm_fb_device *dev, qua_fb_alpha_t *alpha);
QUA_S32 (*put_alpha)(struct qua_mm_fb_device *dev, const qua_fb_alpha_t *alpha);
QUA_S32 (*get_var_info)(struct qua_mm_fb_device *dev, qua_fb_var_screeninfo_t *var_info);
QUA_S32 (*put_var_info)(struct qua_mm_fb_device *dev, const qua_fb_var_screeninfo_t *var_info);
QUA_S32 (*get_fix_info)(struct qua_mm_fb_device *dev, qua_fb_fix_screeninfo_t *fix_info);
QUA_VOID_PTR (*map)(struct qua_mm_fb_device *dev, QUA_SIZE_T size, QUA_OFF_T offset);
QUA_VOID (*unmap)(struct qua_mm_fb_device *dev, QUA_VOID_PTR vaddr, QUA_SIZE_T size);
QUA_S32 (*render)(struct qua_mm_fb_device *dev, const qua_fb_var_screeninfo_t *var_info);
QUA_S32 (*bind)(struct qua_mm_fb_device *dev, QUA_VO_DEV dev_num, QUA_VO_LAYER layer);
QUA_S32 (*unbind)(struct qua_mm_fb_device *dev, QUA_VO_DEV dev_num, QUA_VO_LAYER layer);
QUA_S32 (*get_layer_info)(struct qua_mm_fb_device *dev, qua_fb_layer_info_t *layer_info);
QUA_S32 (*put_layer_info)(struct qua_mm_fb_device *dev, const qua_fb_layer_info_t *layer_info);
} qua_mm_fb_device_t;
#endif