PHP and Gamma values

From ElphelWiki
Jump to navigation Jump to search

How to change Gamma values in an Elphel camera

Changing Gamma and BlackLevel values at present requires some special treatment. Here is a short PHP script that does it:

<?php

// Set default frame ahead
if (!array_key_exists("ahead",$_GET))
	$ahead=3;

// Special treatment for the gamma values and blacklevel.
// Get exising gamma values  if a gamma parameter is requested
if (array_key_exists("gamma",$_GET) || array_key_exists("black",$_GET)) {
	$gammas=array(
		"GTAB_R__0816"=>"",
		"GTAB_G__0816"=>"",
		"GTAB_GB__0816"=>"",
		"GTAB_B__0816"=>"",
		"GTAB_R__0824"=>"",
		"GTAB_G__0824"=>"",
		"GTAB_GB__0824"=>"",
		"GTAB_B__0824"=>""
		);
	// get existing gamma values
	$gammas= elphel_get_P_arr($gammas);
}

foreach($_GET as $key=>$value) {
	
	if(strtolower(substr($s, 0, 2))=="0x")
		$value= hexdec($value);
	switch ($key) {
		case "gamma":
			// set gammas array and postpone setting values in the camera
			$value = intval($value);
			$gammas["GTAB_R__0816"]=$value;
			$gammas["GTAB_G__0816"]=$value;
			$gammas["GTAB_GB__0816"]=$value;
			$gammas["GTAB_B__0816"]=$value;
			break;
		case "black":
			// set gammas array and postpone setting values in the camera
			$value = intval($value);
			$gammas["GTAB_R__0824"]=$value;
			$gammas["GTAB_G__0824"]=$value;
			$gammas["GTAB_GB__0824"]=$value;
			$gammas["GTAB_B__0824"]=$value;
			break;
	}
	// If any gamma value was set, set all gamma values in the camera.
	// Was postponed earlier
	if ($gammas != NULL) {
 		// values are taken from the green color
 		elphel_gamma_add($gammas["GTAB_G__0816"]/100, $gammas["GTAB_G__0824"]);
		// Apply the values at the frame ahead
		elphel_set_P_arr($gammas, elphel_get_frame() + $ahead);
	}
	//
	// Add code to form the output here
}

?>

The code looks for HTTP query parameters black (level of black) and gamma and sets them at the same time.

The parameters should be integers: 1 < gamma <= 100 and 0 <= black <= 50.

The undocumented function elphel_gamma_add(int gamma, int black) is used, where the value of gamma for this function must be a float 0.1 < gamma <= 1.0. Without it the gamma values are not effected. Relative code can be found in the file camvc.php in /mnt/flash/html in the camera.