PHP and Gamma values

From ElphelWiki
Revision as of 17:08, 8 February 2012 by Dimitrios (talk | contribs) (Fixed an error in frames ahead)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, 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.