Lines Matching defs:gain
85 static double getGain(int gain);
86 static int getGainSetting(double gain);
132 #define SANE_NAME_GAIN_R "gain-r"
134 #define SANE_DESC_GAIN_R "The gain of the signal processor for red"
135 #define SANE_NAME_GAIN_G "gain-g"
137 #define SANE_DESC_GAIN_G "The gain of the signal processor for green"
138 #define SANE_NAME_GAIN_B "gain-b"
140 #define SANE_DESC_GAIN_B "The gain of the signal processor for blue"
141 #define SANE_NAME_GAIN_I "gain-i"
143 #define SANE_DESC_GAIN_I "The gain of the signal processor for infrared"
160 #define SANE_NAME_GAIN "gain"
162 #define SANE_DESC_GAIN "The gain of the signal processor for the 4 CCD color filters (R,G,B,I)"
616 * gain and offset defaults. The function is called by sane_open(), when no
736 scanner->opt[OPT_GAIN_ADJUST].name = "gain-adjust";
737 scanner->opt[OPT_GAIN_ADJUST].title = "Adjust gain";
738 scanner->opt[OPT_GAIN_ADJUST].desc = "Adjust gain determined by calibration procedure.";
953 /* gain for R, G, B and I */
1873 double gain;
1888 scanner->settings.gain[0] = DEFAULT_GAIN;
1889 scanner->settings.gain[1] = DEFAULT_GAIN;
1890 scanner->settings.gain[2] = DEFAULT_GAIN;
1891 scanner->settings.gain[3] = DEFAULT_GAIN;
1961 scanner->settings.gain[0] = scanner->val[OPT_SET_GAIN_R].w;
1962 scanner->settings.gain[1] = scanner->val[OPT_SET_GAIN_G].w;
1963 scanner->settings.gain[2] = scanner->val[OPT_SET_GAIN_B].w;
1964 scanner->settings.gain[3] = scanner->val[OPT_SET_GAIN_I].w; /* Infrared */
1985 /* Adjust gain */
1986 gain = 1.0;
1988 gain = 0.3;
1990 gain = 0.5;
1992 gain = 0.8;
1994 gain = 1.0;
1996 gain = 1.2;
1998 gain = 1.6;
2000 gain = 1.9;
2002 gain = 2.4;
2004 gain = 3.0;
2009 updateGain2 (scanner, 0, gain);
2010 updateGain2 (scanner, 1, gain);
2011 updateGain2 (scanner, 2, gain);
2015 updateGain2 (scanner, 3, gain);
2018 updateGain2 (scanner, 2, gain);
2021 updateGain2 (scanner, 1, gain);
2024 updateGain2 (scanner, 0, gain);
2029 /* Now set values for gain, offset and exposure */
2366 scanner->preview_gain[k] = scanner->settings.gain[k];
2402 * Return actual gain at given gain setting
2404 * @param gain Gain setting (0 - 63)
2407 static double getGain(int gain)
2412 if (gain <= 0) {
2415 /* A gain > 63 is also an error, but don't be picky */
2416 if (gain >= 60) {
2417 return (gain-55)*(gains[12]-gains[11])/5 + gains[11];
2420 k = gain/5; /* index of array value just below given gain */
2421 return (gain-5*k)*(gains[k+1]-gains[k])/5 + gains[k];
2424 static int getGainSetting(double gain)
2429 if (gain < 1.0) {
2432 if (gain >= gains[12]) {
2433 m = 60 + lround((gain-gains[11])/(gains[12]-gains[11])*5);
2440 if (gains[k] <= gain && gain < gains[k+1]) {
2441 m = 5*k + lround((gain-gains[k])/(gains[k+1]-gains[k])*5);
2448 * Modify gain and exposure times in order to make maximal use of the scan depth.
2452 * In a couuple of tries, gain was set to values of 60 and above, which introduces
2456 * Maybe a uniform gain increase for each color is more appropriate? Somewhere
2494 // Additional gain to obtain
2496 DBG(DBG_info_sane,"updateGain(): additional gain %f\n", dg);
2497 // Achieve this by modifying gain and exposure
2500 DBG(DBG_info_sane,"updateGain(): preview had gain %d => %f\n",scanner->preview_gain[color_index],g);
2501 // Look up new gain setting g*sqrt(dg)
2502 DBG(DBG_info_sane,"updateGain(): optimized gain * %f = %f\n",sqrt(dg),sqrt(dg)*g);
2503 scanner->settings.gain[color_index] = getGainSetting(g*sqrt(dg));
2504 DBG(DBG_info_sane,"updateGain(): optimized gain setting %d => %f\n",scanner->settings.gain[color_index],getGain(scanner->settings.gain[color_index]));
2506 DBG(DBG_info_sane,"updateGain(): remains for exposure %f\n",dg/(getGain(scanner->settings.gain[color_index])/g));
2507 scanner->settings.exposureTime[color_index] = lround( g / getGain(scanner->settings.gain[color_index]) * dg * scanner->preview_exposure[color_index] );
2508 DBG(DBG_info_sane,"updateGain(): new setting G=%d Exp=%d\n", scanner->settings.gain[color_index], scanner->settings.exposureTime[color_index]);
2516 DBG(DBG_info,"updateGain2(): color %d preview used G=%d Exp=%d\n", color_index, scanner->settings.gain[color_index], scanner->settings.exposureTime[color_index]);
2517 /* Additional gain to obtain */
2518 DBG(DBG_info,"updateGain2(): additional gain %f\n", gain_increase);
2519 /* Achieve this by modifying gain and exposure */
2521 g = getGain(scanner->settings.gain[color_index]);
2522 DBG(DBG_info,"updateGain2(): preview had gain %d => %f\n", scanner->settings.gain[color_index], g);
2523 /* Look up new gain setting g*sqrt(dg) */
2524 DBG(DBG_info,"updateGain2(): optimized gain * %f = %f\n", sqrt(gain_increase), sqrt(gain_increase) * g);
2525 scanner->settings.gain[color_index] = getGainSetting(g * sqrt(gain_increase));
2526 DBG(DBG_info,"updateGain2(): optimized gain setting %d => %f\n", scanner->settings.gain[color_index], getGain(scanner->settings.gain[color_index]));
2528 DBG(DBG_info,"updateGain2(): remains for exposure %f\n", gain_increase / (getGain(scanner->settings.gain[color_index]) / g));
2529 scanner->settings.exposureTime[color_index] = lround( g / getGain(scanner->settings.gain[color_index]) * gain_increase * scanner->settings.exposureTime[color_index] );
2530 DBG(DBG_info,"updateGain2(): new setting G=%d Exp=%d\n", scanner->settings.gain[color_index], scanner->settings.exposureTime[color_index]);