backend/avision: i1120: add option AV_GAMMA_UINT16

Kodak i1120 has a different gamma table format that looks like a
uint16/double array. Implement it and add an option for it.

Signed-off-by: Michael Niewöhner <foss@mniewoehner.de>
merge-requests/244/head
Michael Niewoehner 2018-10-01 18:10:09 +02:00 zatwierdzone przez Michael Niewöhner
rodzic d8bf392424
commit e54c9602e9
2 zmienionych plików z 20 dodań i 4 usunięć

Wyświetl plik

@ -5282,11 +5282,24 @@ send_gamma (Avision_Scanner* s)
v2 = 0;
}
for (k = 0; k < gamma_values; ++ k, ++ i) {
gamma_data [i] = (uint8_t)
(((v1 * (gamma_values - k)) + (v2 * k) ) / (double) gamma_values);
}
if (s->hw->hw->feature_type & AV_GAMMA_UINT16) {
/* Use some pointer-cast magic to use gamma_data as uint16 array
and write as big-endian since values get swapped */
((uint16_t *)gamma_data) [i++] = (uint16_t)v1<<8;
} else {
/* interpolate gamma_values to gamma_data */
for (k = 0; k < gamma_values; ++ k, ++ i) {
gamma_data [i] = (uint8_t)
(((v1 * (gamma_values - k)) + (v2 * k) ) / (double) gamma_values);
}
}
}
/* with AV_GAMMA_UINT16 only every second value is filled, so double i */
if (s->hw->hw->feature_type & AV_GAMMA_UINT16)
i *= 2;
/* fill the gamma table - (e.g.) if 11bit (old protocol) table */
{
size_t t_i = i-1;

Wyświetl plik

@ -222,6 +222,9 @@ typedef struct Avision_HWEntry {
/* Kodak i1120 needs gamma = 1.0 to give decent results */
#define AV_GAMMA_10 ((uint64_t)1<<41)
/* Kodak i1120 has a different gamma table format (like a uint16/double array) */
#define AV_GAMMA_UINT16 ((uint64_t)1<<42)
/* maybe more ...*/
uint64_t feature_type;