diff options
| -rw-r--r-- | iq.c | 21 | ||||
| -rw-r--r-- | iq.h | 5 | ||||
| -rw-r--r-- | live.c | 2 | ||||
| -rw-r--r-- | snapshot.c | 2 | 
4 files changed, 27 insertions, 3 deletions
| @@ -61,8 +61,17 @@ void iq_aewb_process(struct iq_tuning *iq,  	omap3_isp_preview_set_white_balance(iq->isp, gains); -	/* Automatic Exposure */ -	if ((iq->frame_count++ % 2) == 0) +	/* Automatic Exposure +	 * +	 * Skip ae_delay frames at stream startup, and only run AE every +	 * ae_interval frames to take sensor exposure internal delays into +	 * account. +	 */ +	iq->frame_count++; +	if (iq->frame_count <= iqp->ae_delay) +		return; + +	if ((iq->frame_count - iqp->ae_delay - 1) % iqp->ae_interval)  		return;  	mean = stats->accum[0] + stats->accum[1] @@ -97,6 +106,8 @@ void iq_params_init(struct iq_params *params)  	params->window.top = 0.0;  	params->window.width = 1.0;  	params->window.height = 1.0; +	params->ae_delay = 1; +	params->ae_interval = 2;  	params->mean_level = 0.15;  	params->exposure = 1000;  	params->exposure_min = 10; @@ -137,7 +148,11 @@ int iq_params_parse(struct iq_params *params, const char *arg)  	size = value - arg;  	value++; -	if (strncmp(arg, "exposure-def", size) == 0) +	if (strncmp(arg, "ae-delay", size) == 0) +		val_uint = ¶ms->ae_delay; +	else if (strncmp(arg, "ae-interval", size) == 0) +		val_uint = ¶ms->ae_interval; +	else if (strncmp(arg, "exposure-def", size) == 0)  		val_uint = ¶ms->exposure;  	else if (strncmp(arg, "exposure-min", size) == 0)  		val_uint = ¶ms->exposure_min; @@ -30,6 +30,8 @@ struct omap3_isp_aewb_stats;  /**   * struct iq_params - Image quality tuning parameters   * @window: Statistics computation window (fraction of the image size) + * @ae_delay: Number of frames to skip at stream start before enabling AE + * @ae_interval: Number of frames between AE algorithm runs   * @mean_level: Target mean luminance level (fraction of the maximum)   * @exposure: Initial exposure value (sensor-specific units)   * @exposure_min: Minimum exposure value @@ -47,6 +49,9 @@ struct iq_params {  		float height;  	} window; +	unsigned int ae_delay; +	unsigned int ae_interval; +  	float mean_level;  	unsigned int exposure; @@ -327,6 +327,8 @@ static void usage(const char *argv0)  	printf("-s, --skip n		Skip display of n frames out of n+1\n");  	printf("    --aewb param=value	Set AEWB algorithm parameter 'param' to 'value'\n");  	printf("\nSupported AEWB parameters are:\n"); + 	printf("- ae-delay		Number of frames to skip at stream start before enabling AE\n"); +	printf("- ae-interval		Number of frames between AE algorithm runs (>= 1)\n");  	printf("- exposure-def		Exposure time default value\n");  	printf("- exposure-min		Exposure time minimum value\n");  	printf("- exposure-max		Exposure time maximum value\n"); @@ -402,6 +402,8 @@ static void usage(const char *argv0)  	printf("-v, --view		Enable viewfinder\n");  	printf("    --aewb param=value	Set AEWB algorithm parameter 'param' to 'value'\n");  	printf("\nSupported AEWB parameters are:\n"); + 	printf("- ae-delay		Number of frames to skip at stream start before enabling AE\n"); +	printf("- ae-interval		Number of frames between AE algorithm runs (>= 1)\n");  	printf("- exposure-def		Exposure time default value\n");  	printf("- exposure-min		Exposure time minimum value\n");  	printf("- exposure-max		Exposure time maximum value\n"); | 
