130 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #include "vendor_isp.h"
 | |
| 
 | |
| //=============================================================================
 | |
| // function declaration
 | |
| //=============================================================================
 | |
| 
 | |
| //=============================================================================
 | |
| // global
 | |
| //=============================================================================
 | |
| #define LA_WIN_X            32
 | |
| #define LA_WIN_Y            32
 | |
| #define AE_TARGET_Y         40
 | |
| #define AE_CONVERGE_RANGE   10
 | |
| #define AE_CONVRANGE_L      (AE_TARGET_Y - AE_CONVERGE_RANGE)
 | |
| #define AE_CONVRANGE_H      (AE_TARGET_Y + AE_CONVERGE_RANGE)
 | |
| #define AE_EXPTIME_DEFAULT  10000
 | |
| #define AE_EXPTIME_L        500
 | |
| #define AE_EXPTIME_H        30000
 | |
| #define AE_EXPTIME_STEP     100
 | |
| #define AE_GAIN_DEFAULT     1000
 | |
| #define AE_GAIN_L           1000
 | |
| #define AE_GAIN_H           4000
 | |
| #define AE_GAIN_STEP        100
 | |
| 
 | |
| void sample_ae_init(unsigned int id)
 | |
| {
 | |
| 	HD_RESULT result = HD_OK;
 | |
| 	ISPT_SENSOR_EXPT sensor_expt = {0};
 | |
| 	ISPT_SENSOR_GAIN sensor_gain = {0};
 | |
| 
 | |
| 	sensor_expt.id = id;
 | |
| 	sensor_gain.id = id;
 | |
| 	sensor_expt.time[0] = AE_EXPTIME_DEFAULT;
 | |
| 	sensor_gain.ratio[0] = AE_GAIN_DEFAULT;
 | |
| 
 | |
| 	result = vendor_isp_set_common(ISPT_ITEM_SENSOR_EXPT, &sensor_expt);
 | |
| 	if (result != HD_OK) {
 | |
| 		printf("SET ISPT_ITEM_SENSOR_EXPT fail, result = %d \n",result);
 | |
| 	}
 | |
| 	result = vendor_isp_set_common(ISPT_ITEM_SENSOR_GAIN, &sensor_gain);
 | |
| 	if (result != HD_OK) {
 | |
| 		printf("SET ISPT_ITEM_SENSOR_GAIN fail, result = %d \n",result);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void sample_ae_trig(unsigned int id)
 | |
| {
 | |
| 	// NOTE: Get LA from isp device
 | |
| 	HD_RESULT result = HD_OK;
 | |
| 	ISPT_SENSOR_EXPT sensor_expt = {0};
 | |
| 	ISPT_SENSOR_GAIN sensor_gain = {0};
 | |
| 	UINT32 ix, iy, iyw;
 | |
| 	UINT32 lum, la_sum;
 | |
| 	static UINT32 exptime = AE_EXPTIME_DEFAULT;
 | |
| 	static UINT32 gain = AE_GAIN_DEFAULT;
 | |
| 	ISPT_LA_DATA la_data = {0};
 | |
| 	static UINT32 frame_cnt = 0;
 | |
| 
 | |
| 	la_data.id = id;
 | |
| 	result = vendor_isp_get_common(ISPT_ITEM_LA_DATA, &la_data);
 | |
| 
 | |
| 	if(frame_cnt < 2) {
 | |
| 		frame_cnt ++;
 | |
| 		return;
 | |
| 	} else {
 | |
| 		frame_cnt = 0;
 | |
| 	}
 | |
| 
 | |
| 	la_sum = 0;
 | |
| 
 | |
| 	if (result == HD_OK) {
 | |
| 		//printf("id = %d, no. 528 data = %d, %d \n", la_data.id, la_data.la_rslt.lum_1[528], la_data.la_rslt.lum_2[528]);
 | |
| 
 | |
| 		for (iy = 0; iy < LA_WIN_Y; iy ++) {
 | |
| 			iyw = iy * LA_WIN_X;
 | |
| 			for (ix = 0; ix < LA_WIN_X; ix ++) {
 | |
| 				la_sum += (UINT32)la_data.la_rslt.lum_1[iyw + ix];
 | |
| 			}
 | |
| 		}
 | |
| 	} else {
 | |
| 			la_sum = 0;
 | |
| 		printf("GET ISPT_ITEM_LA_DATA fail, result = %d \r\n",result);
 | |
| 	}
 | |
| 
 | |
| 	lum = la_sum/(LA_WIN_X * LA_WIN_Y);
 | |
| 	lum = (lum >> 4);
 | |
| 
 | |
| 	if((lum <= AE_CONVRANGE_H) && (lum >= AE_CONVRANGE_L)) {
 | |
| 		printf("AE stable.\r\n");
 | |
| 	} else {
 | |
| 		if(lum < AE_CONVRANGE_L) {
 | |
| 			exptime += AE_EXPTIME_STEP;
 | |
| 			if(exptime > AE_EXPTIME_H) {
 | |
| 				exptime = AE_EXPTIME_H;
 | |
| 				gain += AE_GAIN_STEP;
 | |
| 				if(gain > AE_GAIN_H) {
 | |
| 					gain = AE_GAIN_H;
 | |
| 				}
 | |
| 			}
 | |
| 		} else if(lum > AE_CONVRANGE_H){
 | |
| 			if(gain > AE_GAIN_L) {
 | |
| 				gain -= AE_GAIN_STEP;
 | |
| 			} else {
 | |
| 				if(exptime > AE_EXPTIME_L) {
 | |
| 					exptime -= AE_EXPTIME_STEP;
 | |
| 				} else {
 | |
| 					exptime = AE_EXPTIME_L;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	sensor_expt.id = id;
 | |
| 	sensor_gain.id = id;
 | |
| 	sensor_expt.time[0] = exptime;
 | |
| 	sensor_gain.ratio[0] = gain;
 | |
| 
 | |
| 	result = vendor_isp_set_common(ISPT_ITEM_SENSOR_EXPT, &sensor_expt);
 | |
| 	if (result != HD_OK) {
 | |
| 		printf("SET ISPT_ITEM_SENSOR_EXPT fail, result = %d \n",result);
 | |
| 	}
 | |
| 	result = vendor_isp_set_common(ISPT_ITEM_SENSOR_GAIN, &sensor_gain);
 | |
| 	if (result != HD_OK) {
 | |
| 		printf("SET ISPT_ITEM_SENSOR_GAIN fail, result = %d \n",result);
 | |
| 	}
 | |
| 	printf("lum = %4d, exptime = %5d, gain = %3d\n", lum, sensor_expt.time[0], sensor_gain.ratio[0]);
 | |
| 
 | |
| }
 | |
| 
 | 
