/******************************************************************************************* # Copyright (c) 2023~2025 Quaming Intelligent Technology Co., Ltd. # All Rights Reserved. # Confidential and Proprietary - Quaming Intelligent Technology Co., Ltd. #*******************************************************************************************/ #ifndef __QUA_MM_CAMERA_H__ #define __QUA_MM_CAMERA_H__ #include "common/qua_mm_common.h" #include "common/qua_mm_video_common_type.h" #include "isp/isp_common.h" #include "isp/isp_api.h" #include "isp/isp_enum.h" #include "isp/isp_sensor_if.h" #define QUA_MM_CAMERA_DEV_VI "camera.vi" #define QUA_MM_CAMERA_DEV_ISP "camera.isp" #define QUA_MM_CAMERA_DEV_SENSOR "camera.sensor" typedef enum { QUA_VI_SNS0 = 0, //!< sensor0的序号 QUA_VI_SNS1 = 1, //!< sensor1的序号 QUA_VI_SNS2 = 2, //!< sensor2的序号 QUA_VI_SNS3 = 3, //!< sensor3的序号 }qua_vi_sns_idx_t; typedef enum { QUA_VI_PIPELINE_MIPI0 = 0, //!< MIPI0序号,本项目对应QUA_VI_SNS0 QUA_VI_PIPELINE_MIPI1 = 1, //!< MIPI1序号,本项目对应QUA_VI_SNS1 QUA_VI_PIPELINE_DVP = 2, //!< DVP序号,本项目对应QUA_VI_SNS2 QUA_VI_PIPELINE_TESTMODE = 3, //!< 在线模式QUA_VI测试模式,离线模式下不支持 }qua_vi_idx_t; typedef enum { QUA_VI_STITCH_FREE_RUN = 0, //!< sns非同步模式时的拼接 QUA_VI_STITCH_SYNC_MODE = 1, //!< sns同步模式时的拼接 QUA_VI_STITCH_LARGE_PIC_MODE = 2, //!< 硬件大图处理模式 QUA_VI_STITCH_BUTT, }qua_vi_stitch_mode_t; typedef enum { QUA_VI_WORK_MODE_ONLINE = 0, //!< QUA_VI工作在在线模式 QUA_VI_WORK_MODE_OFFLINE = 1, //!< QUA_VI工作在离线模式 QUA_VI_WORK_MODE_BUTT, }qua_vi_work_mode_t; typedef enum { QUA_VI_SFRAME = 0, //!< 短帧通道号 QUA_VI_LFRAME = 1, //!< 长帧通道号 }qua_vi_wdr_chan_t; typedef enum { QUA_VI_BAYER_RGGB = 0x0, //!< 色彩模式RGGB QUA_VI_BAYER_GRBG = 0x1, //!< 色彩模式GRBG QUA_VI_BAYER_BGGR = 0x2, //!< 色彩模式BGGR QUA_VI_BAYER_GBRG = 0x3, //!< 色彩模式GBRG QUA_VI_BAYER_TYPE_DUMMY=0xffffffff, } qua_vi_bayer_type_t; typedef enum { QUA_VI_VSYNC_ONLY = 0, //!< 只有垂直同步信号 QUA_VI_VSYNC_HSYNC = 1, //!< 垂直同步信号 + 水平同步信号 } qua_vi_sync_mode_t; typedef enum { QUA_VI_VSYNC_TRIGGER_INTER = 0, //!< 周期性发送vsync和hsync QUA_VI_VSYNC_TRIGGER_EXTER = 1, //!< 外部触发发送一个周期的vsync和hsync } qua_vi_sync_trigger_mode_t; typedef enum { QUA_VI_DATA_IN_RAW12 = 0, //!< 输入的数据格式为RAW12 QUA_VI_DATA_IN_RAW16 = 1, //!< 输入的数据格式为RAW16 QUA_VI_DATA_IN_YUV16 = 2, //!< 输入的数据格式为YUV16 QUA_VI_DATA_IN_YUYV = 3, //!< 输入的数据格式为YUYV QUA_VI_DATA_IN_UYVY = 4, //!< 输入的数据格式为UYVY QUA_VI_DATA_IN_BUTT, } qua_vi_input_data_type_t; typedef enum { QUA_VI_DVP_BIT_MODE_16BIT_YUV = 0, //!< DVP输入格式为YUV16 QUA_VI_DVP_BIT_MODE_12BIT_RAW = 1, //!< DVP输入格式为RAW12 QUA_VI_DVP_BIT_MODE_10BIT_RAW = 2, //!< DVP输入格式为RAW10 }qua_vi_dvp_in_bit_mode_t; typedef enum { QUA_VI_BT656_BIT_MODE_16BIT_YUV = 0, //!< BT656输入格式为YUV16 QUA_VI_BT656_BIT_MODE_8BIT_YUV = 1, //!< BT656输入格式为RAW12 }qua_vi_bit656_in_bit_mode_t; typedef enum { QUA_VI_DVP_SYNC_POL_HIGH = 0, //!< 同步信号高有效 QUA_VI_DVP_SYNC_POL_LOW = 1, //!< 同步信号低有效 }qua_vi_sync_pol_t; typedef struct { QUA_BOOL cut_enable; //!< 裁剪的使能寄存器。取值范围:[0~1] qua_rect_t rect; //!< 裁剪的偏移及裁剪后的宽高。取值范围:[qua_rect_t] }qua_vi_crop_cfg_t; typedef struct { QUA_U8 priority; //!< 离线遍历优先级。取值范围:[0~0xf] }qua_vi_offline_cfg_t; typedef struct { qua_vi_bayer_type_t bayer_type; //!< bayer pattern。取值范围:[qua_vi_bayer_type_t] qua_vi_work_mode_t work_mode; //!< 配置当前QUA_VI的工作模式。取值范围:[qua_vi_work_mode_t] QUA_U8 wdr_mode; //!< 输入sensor的线性还是wdr配置。取值范围:[0~1] qua_size_t in_size; //!< 输入幅面。取值范围:[qua_size_t] qua_vi_crop_cfg_t crop_size; //!< 裁剪后幅面。取值范围:[qua_vi_crop_cfg_t] qua_vi_offline_cfg_t offline_cfg; //!< 离线下的配置。取值范围:[qua_vi_offline_cfg_t] QUA_U8 bit_width; // 输入的pixel宽度 | [FH_UINT8] }qua_vi_dev_attr_t; typedef struct { QUA_BOOL using_vb; //!< 是否使用VB缓存逻辑。取值范围:[0~1] qua_vi_input_data_type_t data_type_in; //!< SENSOR输入该模块的数据格式,本芯片仅DVP有效。取值范围: [qua_vi_input_data_type_t] qua_vi_work_mode_t work_mode; //!< 配置当前QUA_VI的工作模式,影响内存分配。取值范围:[qua_vi_work_mode_t] qua_size_t size; //!< 图像幅面, 会影响内存分配, 故需按应用需要的最大幅面配置。取值范围:[qua_size_t] }qua_vi_attr_t; typedef struct { qua_vi_dvp_in_bit_mode_t bit_mode; //!< 配置当前输出模式是raw还是yuv等。取值范围:[qua_vi_dvp_in_bit_mode_t] qua_vi_sync_pol_t hsync_polarity; //!< DVP水平同步信号极性。取值范围:[qua_vi_sync_pol_t] qua_vi_sync_pol_t vsync_polarity; //!< DVP垂直同步信号极性。取值范围:[qua_vi_sync_pol_t] QUA_U8 io_remap[16]; //!< 对应的16个管脚的映射关系。取值范围:[0~0xf] }qua_vi_dvp_cfg_t; typedef struct { qua_vi_bit656_in_bit_mode_t bit_mode; //!< 配置当前输出模式是raw还是yuv等。取值范围:[qua_vi_dvp_in_bit_mode_t] qua_vi_sync_pol_t hsync_polarity; //!< DVP水平同步信号极性。取值范围:[qua_vi_sync_pol_t] qua_vi_sync_pol_t vsync_polarity; //!< DVP垂直同步信号极性。取值范围:[qua_vi_sync_pol_t] QUA_U8 io_remap[16]; //!< 对应的16个管脚的映射关系。取值范围:[0~0xf] }qua_vi_bt656_cfg_t; typedef struct { qua_vi_sync_pol_t hsync_polarity; //!< DVP水平同步信号极性。取值范围:[qua_vi_sync_pol_t] qua_vi_sync_pol_t vsync_polarity; //!< DVP垂直同步信号极性。取值范围:[qua_vi_sync_pol_t] QUA_U8 io_revert; //!< dvp管脚是否revert QUA_U32 ir_fs_high_period; //!