MC3302_SDK_V1.1.9_202507281.../media/mpp/include/pre_rolling.h

179 lines
4.4 KiB
C
Raw Normal View History

2025-11-11 04:08:31 +00:00
#ifndef __PRE_ROLLING_H__
#define __PRE_ROLLING_H__
#include "isp460/isp_sensor_if.h"
#define MAX_AE_INFO_NODE_NUM (20)
#define MAX_AWB_INFO_NODE_NUM (20)
#define MAX_CTRL_INFO_NODE_NUM (20)
#define PPS_INFO_NUM (20)
typedef enum {
SENSOR_POWER_ALWAYS_ON = 1,
SENSOR_POWER_STANBY,
SENSOR_POWER_OFF
} SENSOR_POWER_MODE_E;
typedef enum {
PRG_NORMAL_MODE = 0,
PRG_TUNNING_MODE,
PRG_INVALID_WORK_MODE
} PRG_WORK_MODE;
/*
* @pic_enc_mode, picture encode mode in pre_rolling system.
* =0, Raw, output RawData.
* =1, no encode, output YData directly.
* =2, JPEG, output jpeg picture.
* =3, H264, output h264 picture.
* @frame_rate, frame rate to share memory in pre-rolling system.
* @pic_continue_out, indicate whether continue output picture while
* pre_rolling exit.
* @pic_abort, indicate whether PIR event abot pre_rolling process.
* @main_sensor_preconfig, incidate whether to pre-config main sensor.
* @sensor_power_mode.
* =0, always on.
* =1, standby.
* =2, power off.
*/
struct prg_system_info {
unsigned int pic_enc_mode;
unsigned int main_sensor_preconfig;
unsigned int pic_continue_out;
unsigned int pic_abort;
unsigned int sensor_power_mode;
unsigned int prg_power_mode;
unsigned int stanby_time;
//unsigned int frame_rate;
};
/*
* @phy_base/buf_size, the DDR memory space to store picture data & control information.
* @pre_data_offset/len, picture data during pre-rolling.
* @pre_ctrl_offset/len, control information during pre-rolling.
* @pre_ctrl_num, control information number during pre-rolling.
* @extra_data_len, picture data during the whole system boot. base is pys_base.
* @extra_ctrl_offset/len, control information during system boot.
* @extra_ctrl_number, control information number during system boot.
*/
struct prg_picture_info {
unsigned int phy_base;
unsigned int buf_size;
unsigned int pre_data_offset;
unsigned int pre_data_len;
unsigned int pre_ctrl_offset;
unsigned int pre_ctrl_len;
unsigned int pre_ctrl_num;
unsigned int ae_ctrl_offset;
unsigned int ae_ctrl_num;
unsigned int awb_ctrl_offset;
unsigned int awb_ctrl_num;
unsigned int extra_data_offset;
unsigned int extra_data_len;
unsigned int extra_ctrl_offset;
unsigned int extra_ctrl_len;
unsigned int extra_ctrl_num;
unsigned int extra_ae_ctrl_offset;
unsigned int extra_ae_ctrl_num;
unsigned int extra_awb_ctrl_offset;
unsigned int extra_awb_ctrl_num;
};
/*
* @frame_id, picture id
* @frame_addr, picture phy addr
* @frame_size, picture real size
* @pps, rawec picture pps info, This will be left blank when h264 and jpeg mode
*/
typedef struct {
unsigned int frame_id;
unsigned int frame_addr;
unsigned int frame_size;
unsigned int PPS_0;
unsigned int PPS_1;
unsigned int PPS_2;
unsigned int PPS_3;
unsigned int PPS_4;
unsigned int PPS_5;
unsigned int PPS_6;
unsigned int PPS_7;
unsigned int PPS_8;
unsigned int PPS_9;
unsigned int PPS_10;
unsigned int PPS_11;
unsigned int PPS_12;
unsigned int PPS_13;
unsigned int PPS_14;
unsigned int PPS_15;
unsigned int STAT_0;
unsigned int STAT_1;
unsigned int STAT_2;
unsigned int STAT_3;
}Prg_Pps_Info_Node_S;
/*
* @info
* @valid, picture valid flag.
* =1, picture is complete.
* =0, picture is not complete.
*/
struct prg_ctrl_info_node {
Prg_Pps_Info_Node_S info;
unsigned int valid;
};
typedef struct {
unsigned int rGain;
unsigned int gGain;
unsigned int bGain;
unsigned int CT;
unsigned int framId;
}awb_info_t;
typedef struct {
unsigned int exposureTime;
unsigned int aGain;
unsigned int dGain;
unsigned int EV;
unsigned int framId;
}ae_info_t;
struct prg_buffer {
unsigned int base;
unsigned int size;
};
struct prg_image_info {
unsigned int phy_base;
unsigned int size;
};
struct prg_sensor_info {
Sensor_Param_S sensor;
void *hex_virt;
unsigned int hex_len;
};
int pre_rolling_init(int mode, struct prg_system_info *info);
int pre_rolling_deinit(int mode);
int pre_rolling_get_frame(struct prg_picture_info *image);
int pre_rolling_get_system_info(struct prg_system_info *info);
int pre_rolling_set_system_info(struct prg_system_info *info);
int pre_rolling_get_image_info(struct prg_image_info *image);
int pre_rolling_set_sensor_info(Sensor_Param_S *sensor, void *hex, unsigned int len);
int pre_rolling_get_prg_state(unsigned int *state);
int pre_rolling_set_ppbuf(void);
int pre_rolling_start(void);
#endif