Lines Matching refs:scanner

295 calc_image_params (struct hp5590_scanner *scanner,
312 if (!scanner)
315 ret = hp5590_calc_pixel_bits (scanner->dpi, scanner->depth, &_pixel_bits);
319 var = (float) (1.0 * (scanner->br_x - scanner->tl_x) * scanner->dpi);
324 var = (float) (1.0 * (scanner->br_y - scanner->tl_y) * scanner->dpi);
365 struct hp5590_scanner *scanner, *ptr;
384 DBG (1, "%s: found HP%s scanner at '%s'\n",
407 scanner = malloc (sizeof(struct hp5590_scanner));
408 if (!scanner)
410 memset (scanner, 0, sizeof(struct hp5590_scanner));
412 scanner->sane.model = info->model;
413 scanner->sane.vendor = "HP";
414 scanner->sane.type = info->kind;
415 scanner->sane.name = devname;
416 scanner->dn = dn;
417 scanner->proto_flags = hp5590_model->proto_flags;
418 scanner->info = info;
419 scanner->bulk_read_state = NULL;
420 scanner->opts = NULL;
421 scanner->eop_last_line_data = NULL;
422 scanner->eop_last_line_data_rpos = 0;
423 scanner->adf_next_page_lines_data = NULL;
424 scanner->adf_next_page_lines_data_size = 0;
425 scanner->adf_next_page_lines_data_rpos = 0;
426 scanner->adf_next_page_lines_data_wpos = 0;
427 scanner->one_line_read_buffer = NULL;
428 scanner->one_line_read_buffer_rpos = 0;
429 scanner->color_shift_line_buffer1 = NULL;
430 scanner->color_shift_buffered_lines1 = 0;
431 scanner->color_shift_line_buffer2 = NULL;
432 scanner->color_shift_buffered_lines2 = 0;
435 scanners_list = scanner;
439 ptr->next = scanner;
862 struct hp5590_scanner *scanner = handle;
866 sanei_usb_close (scanner->dn);
867 scanner->dn = -1;
874 struct hp5590_scanner *scanner = handle;
881 return &scanner->opts[option];
888 struct hp5590_scanner * scanner = handle;
891 DBG (DBG_verbose, "%s: Checking button status (device_number = %u) (device_name = %s)\n", __func__, scanner->dn, scanner->sane.name);
892 SANE_Status ret = hp5590_read_buttons (scanner->dn, scanner->proto_flags, &status);
909 struct hp5590_scanner * scanner = handle;
913 __func__, scanner->dn, scanner->sane.name);
914 SANE_Status ret = hp5590_read_lcd_and_led (scanner->dn, scanner->proto_flags, lcd_counter, color_led);
930 struct hp5590_scanner * scanner = handle;
932 __func__, scanner->dn, scanner->sane.name);
933 SANE_Status ret = hp5590_is_data_available (scanner->dn, scanner->proto_flags);
953 struct hp5590_scanner *scanner = handle;
973 if (!scanner->opts)
976 DBG (DBG_proc, "%s: get option '%s' value\n", __func__, scanner->opts[option].name);
980 *(SANE_Fixed *) value = SANE_FIX (scanner->br_x * 25.4);
985 *(SANE_Fixed *) value = SANE_FIX (scanner->br_y * 25.4);
990 *(SANE_Fixed *) value = SANE_FIX ((scanner->tl_x) * 25.4);
995 *(SANE_Fixed *) value = SANE_FIX (scanner->tl_y * 25.4);
1000 switch (scanner->depth) {
1002 memset (value , 0, scanner->opts[option].size);
1006 memset (value , 0, scanner->opts[option].size);
1010 memset (value , 0, scanner->opts[option].size);
1014 memset (value , 0, scanner->opts[option].size);
1024 switch (scanner->source) {
1026 memset (value , 0, scanner->opts[option].size);
1030 memset (value , 0, scanner->opts[option].size);
1034 memset (value , 0, scanner->opts[option].size);
1038 memset (value , 0, scanner->opts[option].size);
1042 memset (value , 0, scanner->opts[option].size);
1053 *(SANE_Int *) value = scanner->dpi;
1058 *(SANE_Bool *) value = scanner->extend_lamp_timeout;
1063 *(SANE_Bool *) value = scanner->wait_for_button;
1069 SANE_Status ret = read_button_pressed(scanner, &button_pressed);
1074 strncpy (value, BUTTON_PRESSED_VALUE_POWER_KEY, scanner->opts[option].size);
1077 strncpy (value, BUTTON_PRESSED_VALUE_SCAN_KEY, scanner->opts[option].size);
1080 strncpy (value, BUTTON_PRESSED_VALUE_COLLECT_KEY, scanner->opts[option].size);
1083 strncpy (value, BUTTON_PRESSED_VALUE_FILE_KEY, scanner->opts[option].size);
1086 strncpy (value, BUTTON_PRESSED_VALUE_EMAIL_KEY, scanner->opts[option].size);
1089 strncpy (value, BUTTON_PRESSED_VALUE_COPY_KEY, scanner->opts[option].size);
1092 strncpy (value, BUTTON_PRESSED_VALUE_UP_KEY, scanner->opts[option].size);
1095 strncpy (value, BUTTON_PRESSED_VALUE_DOWN_KEY, scanner->opts[option].size);
1098 strncpy (value, BUTTON_PRESSED_VALUE_MODE_KEY, scanner->opts[option].size);
1101 strncpy (value, BUTTON_PRESSED_VALUE_CANCEL_KEY, scanner->opts[option].size);
1105 strncpy (value, BUTTON_PRESSED_VALUE_NONE_KEY, scanner->opts[option].size);
1113 SANE_Status ret = read_lcd_and_led_values(scanner, &lcd_counter, &color_led);
1118 strncpy (value, COLOR_LED_VALUE_BLACKWHITE_KEY, scanner->opts[option].size);
1122 strncpy (value, COLOR_LED_VALUE_COLOR_KEY, scanner->opts[option].size);
1130 SANE_Status ret = read_lcd_and_led_values(scanner, &lcd_counter, &color_led);
1139 SANE_Status ret = read_doc_in_adf_value(scanner, &doc_in_adf);
1147 *(SANE_Bool *) value = scanner->preview;
1152 *(SANE_Bool *) value = scanner->overwrite_eop_pixel;
1157 switch (scanner->eop_trailing_lines_mode) {
1159 memset (value , 0, scanner->opts[option].size);
1163 memset (value , 0, scanner->opts[option].size);
1167 memset (value , 0, scanner->opts[option].size);
1171 memset (value , 0, scanner->opts[option].size);
1175 memset (value , 0, scanner->opts[option].size);
1179 memset (value , 0, scanner->opts[option].size);
1189 *(SANE_Int *) value = scanner->eop_trailing_lines_color;
1201 if (val <= scanner->tl_x)
1203 scanner->br_x = val;
1211 if (val <= scanner->tl_y)
1213 scanner->br_y = val;
1221 if (val >= scanner->br_x)
1223 scanner->tl_x = val;
1231 if (val >= scanner->br_y)
1233 scanner->tl_y = val;
1242 scanner->depth = DEPTH_BW;
1246 scanner->depth = DEPTH_GRAY;
1250 scanner->depth = DEPTH_COLOR_24;
1254 scanner->depth = DEPTH_COLOR_48;
1267 range_y.max = SANE_FIX(scanner->info->max_size_y * 25.4);
1271 scanner->source = SOURCE_FLATBED;
1272 range_x.max = SANE_FIX(scanner->info->max_size_x * 25.4);
1273 range_y.max = SANE_FIX(scanner->info->max_size_y * 25.4);
1274 scanner->br_x = scanner->info->max_size_x;
1275 scanner->br_y = scanner->info->max_size_y;
1280 * bigger than what scanner reports back during initialization
1282 if (! (scanner->info->features & FEATURE_ADF))
1287 scanner->source = SOURCE_ADF;
1288 range_x.max = SANE_FIX(scanner->info->max_size_x * 25.4);
1290 scanner->br_x = scanner->info->max_size_x;
1291 scanner->br_y = ADF_MAX_Y_INCHES;
1295 if (! (scanner->info->features & FEATURE_ADF))
1300 scanner->source = SOURCE_ADF_DUPLEX;
1301 range_x.max = SANE_FIX(scanner->info->max_size_x * 25.4);
1303 scanner->br_x = scanner->info->max_size_x;
1304 scanner->br_y = ADF_MAX_Y_INCHES;
1308 if (! (scanner->info->features & FEATURE_TMA))
1313 scanner->source = SOURCE_TMA_SLIDES;
1316 scanner->br_x = TMA_MAX_X_INCHES;
1317 scanner->br_y = TMA_MAX_Y_INCHES;
1321 if (! (scanner->info->features & FEATURE_TMA))
1326 scanner->source = SOURCE_TMA_NEGATIVES;
1329 scanner->br_x = TMA_MAX_X_INCHES;
1330 scanner->br_y = TMA_MAX_Y_INCHES;
1342 scanner->dpi = *(SANE_Int *) value;
1349 scanner->extend_lamp_timeout = *(SANE_Bool *) value;
1354 scanner->wait_for_button = *(SANE_Bool *) value;
1379 scanner->preview = *(SANE_Bool *) value;
1384 scanner->overwrite_eop_pixel = *(SANE_Bool *) value;
1390 scanner->eop_trailing_lines_mode = TRAILING_LINES_MODE_RAW;
1392 scanner->eop_trailing_lines_mode = TRAILING_LINES_MODE_LAST;
1394 scanner->eop_trailing_lines_mode = TRAILING_LINES_MODE_RASTER;
1396 scanner->eop_trailing_lines_mode = TRAILING_LINES_MODE_BLACK;
1398 scanner->eop_trailing_lines_mode = TRAILING_LINES_MODE_WHITE;
1400 scanner->eop_trailing_lines_mode = TRAILING_LINES_MODE_COLOR;
1405 scanner->eop_trailing_lines_color = *(SANE_Int *) value;
1416 struct hp5590_scanner *scanner = handle;
1428 ret = calc_image_params (scanner,
1436 switch (scanner->depth) {
1476 struct hp5590_scanner *scanner = handle;
1482 if (!scanner)
1486 if (scanner->eop_last_line_data)
1489 free (scanner->eop_last_line_data);
1490 scanner->eop_last_line_data = NULL;
1491 scanner->eop_last_line_data_rpos = 0;
1493 if (scanner->one_line_read_buffer)
1496 free (scanner->one_line_read_buffer);
1497 scanner->one_line_read_buffer = NULL;
1498 scanner->one_line_read_buffer_rpos = 0;
1500 if (scanner->color_shift_line_buffer1)
1503 free (scanner->color_shift_line_buffer1);
1504 scanner->color_shift_line_buffer1 = NULL;
1505 scanner->color_shift_buffered_lines1 = 0;
1507 if (scanner->color_shift_line_buffer2)
1510 free (scanner->color_shift_line_buffer2);
1511 scanner->color_shift_line_buffer2 = NULL;
1512 scanner->color_shift_buffered_lines2 = 0;
1515 if ( scanner->scanning == SANE_TRUE
1516 && ( scanner->source == SOURCE_ADF
1517 || scanner->source == SOURCE_ADF_DUPLEX))
1521 ret = hp5590_is_data_available (scanner->dn, scanner->proto_flags);
1525 scanner->transferred_image_size = scanner->image_size;
1535 if (scanner->wait_for_button)
1540 ret = hp5590_read_buttons (scanner->dn,
1541 scanner->proto_flags,
1555 DBG (DBG_verbose, "Init scanner\n");
1556 ret = hp5590_init_scanner (scanner->dn, scanner->proto_flags,
1561 ret = hp5590_power_status (scanner->dn, scanner->proto_flags);
1566 ret = hp5590_select_source_and_wakeup (scanner->dn, scanner->proto_flags,
1567 scanner->source,
1568 scanner->extend_lamp_timeout);
1572 ret = hp5590_set_scan_params (scanner->dn,
1573 scanner->proto_flags,
1574 scanner->info,
1575 scanner->tl_x * scanner->dpi,
1576 scanner->tl_y * scanner->dpi,
1577 (scanner->br_x - scanner->tl_x) * scanner->dpi,
1578 (scanner->br_y - scanner->tl_y) * scanner->dpi,
1579 scanner->dpi,
1580 scanner->depth, scanner->preview ? MODE_PREVIEW : MODE_NORMAL,
1581 scanner->source);
1584 hp5590_reset_scan_head (scanner->dn, scanner->proto_flags);
1588 ret = calc_image_params (scanner, NULL, NULL,
1590 &scanner->image_size);
1593 hp5590_reset_scan_head (scanner->dn, scanner->proto_flags);
1597 scanner->transferred_image_size = scanner->image_size;
1599 if ( scanner->depth == DEPTH_COLOR_24
1600 || scanner->depth == DEPTH_COLOR_48)
1608 scanner->image_size, bytes_per_line);
1609 hp5590_reset_scan_head (scanner->dn, scanner->proto_flags);
1614 scanner->image_size, bytes_per_line);
1618 if (scanner->image_size % bytes_per_line)
1622 scanner->image_size, bytes_per_line);
1623 hp5590_reset_scan_head (scanner->dn, scanner->proto_flags);
1628 scanner->image_size, bytes_per_line);
1631 DBG (DBG_verbose, "Final image size: %llu\n", scanner->image_size);
1634 ret = hp5590_send_reverse_calibration_map (scanner->dn, scanner->proto_flags);
1637 hp5590_reset_scan_head (scanner->dn, scanner->proto_flags);
1642 ret = hp5590_send_forward_calibration_maps (scanner->dn, scanner->proto_flags);
1645 hp5590_reset_scan_head (scanner->dn, scanner->proto_flags);
1649 if (scanner->adf_next_page_lines_data)
1651 free (scanner->adf_next_page_lines_data);
1652 scanner->adf_next_page_lines_data = NULL;
1653 scanner->adf_next_page_lines_data_size = 0;
1654 scanner->adf_next_page_lines_data_rpos = 0;
1655 scanner->adf_next_page_lines_data_wpos = 0;
1658 scanner->scanning = SANE_TRUE;
1661 ret = hp5590_start_scan (scanner->dn, scanner->proto_flags);
1664 && ( scanner->source == SOURCE_ADF
1665 || scanner->source == SOURCE_ADF_DUPLEX))
1670 hp5590_reset_scan_head (scanner->dn, scanner->proto_flags);
1679 invert_negative_colors (unsigned char *buf, unsigned int bytes_per_line, struct hp5590_scanner *scanner)
1682 int is_linear = (scanner->depth == DEPTH_BW);
1683 int is_negative = (scanner->source == SOURCE_TMA_NEGATIVES);
1693 convert_gray_and_lineart (struct hp5590_scanner *scanner, SANE_Byte *data, SANE_Int size)
1702 hp5590_assert (scanner != NULL);
1705 if ( ! (scanner->depth == DEPTH_BW || scanner->depth == DEPTH_GRAY))
1710 ret = calc_image_params (scanner,
1722 if (! scanner->eop_last_line_data)
1731 if (scanner->depth == DEPTH_GRAY)
1734 if (scanner->overwrite_eop_pixel && (j > 0))
1739 else if (scanner->depth == DEPTH_BW)
1742 if (scanner->overwrite_eop_pixel && (j > 0))
1748 invert_negative_colors (buf, bytes_per_line, scanner);
1750 if (eop_found && (! scanner->eop_last_line_data))
1753 scanner->eop_last_line_data = malloc(bytes_per_line);
1754 if (! scanner->eop_last_line_data)
1757 memcpy (scanner->eop_last_line_data, buf, bytes_per_line);
1758 scanner->eop_last_line_data_rpos = 0;
1761 if (scanner->eop_trailing_lines_mode == TRAILING_LINES_MODE_RASTER)
1764 if (scanner->depth == DEPTH_BW)
1766 memset (scanner->eop_last_line_data, 0xaa, bytes_per_line);
1773 scanner->eop_last_line_data[k] = (k & 1 ? 0xff : 0);
1777 else if (scanner->eop_trailing_lines_mode == TRAILING_LINES_MODE_WHITE)
1780 if (scanner->depth == DEPTH_BW)
1782 memset (scanner->eop_last_line_data, 0x00, bytes_per_line);
1786 memset (scanner->eop_last_line_data, 0xff, bytes_per_line);
1789 else if (scanner->eop_trailing_lines_mode == TRAILING_LINES_MODE_BLACK)
1792 if (scanner->depth == DEPTH_BW)
1794 memset (scanner->eop_last_line_data, 0xff, bytes_per_line);
1798 memset (scanner->eop_last_line_data, 0x00, bytes_per_line);
1801 else if (scanner->eop_trailing_lines_mode == TRAILING_LINES_MODE_COLOR)
1803 if (scanner->depth == DEPTH_BW)
1806 memset (scanner->eop_last_line_data, scanner->eop_trailing_lines_color & 0x01 ? 0x00 : 0xff, bytes_per_line);
1811 memset (scanner->eop_last_line_data, scanner->eop_trailing_lines_color & 0xff, bytes_per_line);
1820 i, scanner->eop_trailing_lines_mode, scanner->eop_trailing_lines_color);
1822 if ((scanner->source == SOURCE_ADF) || (scanner->source == SOURCE_ADF_DUPLEX))
1827 if (! scanner->adf_next_page_lines_data)
1831 scanner->adf_next_page_lines_data = malloc(buf_size);
1832 if (! scanner->adf_next_page_lines_data)
1834 scanner->adf_next_page_lines_data_size = buf_size;
1835 scanner->adf_next_page_lines_data_rpos = 0;
1836 scanner->adf_next_page_lines_data_wpos = 0;
1840 invert_negative_colors (buf, bytes_per_line, scanner);
1841 memcpy (scanner->adf_next_page_lines_data + scanner->adf_next_page_lines_data_wpos, buf, bytes_per_line);
1842 scanner->adf_next_page_lines_data_wpos += bytes_per_line;
1845 if (scanner->eop_trailing_lines_mode != TRAILING_LINES_MODE_RAW)
1850 memcpy (buf, scanner->eop_last_line_data, bytes_per_line);
1872 convert_to_rgb (struct hp5590_scanner *scanner, SANE_Byte *data, SANE_Int size)
1886 hp5590_assert (scanner != NULL);
1889 if ( ! (scanner->depth == DEPTH_COLOR_24 || scanner->depth == DEPTH_COLOR_48))
1895 if (scanner->depth == DEPTH_COLOR_48)
1899 ret = calc_image_params (scanner,
1910 if ((scanner->depth == DEPTH_COLOR_48) && (bytes_per_line_limit > 3))
1938 /* Color mapping from raw scanner data to RGB buffer. */
1939 if (scanner->depth == DEPTH_COLOR_24)
1948 else if (scanner->depth == DEPTH_COLOR_48)
1965 if (! scanner->eop_last_line_data)
1975 if (scanner->depth == DEPTH_COLOR_24)
1979 if (scanner->overwrite_eop_pixel && (i > 0))
1986 else if (scanner->depth == DEPTH_COLOR_48)
1990 if (scanner->overwrite_eop_pixel && (i > 0))
2001 invert_negative_colors (buf, bytes_per_line, scanner);
2003 if (eop_found && (! scanner->eop_last_line_data))
2006 scanner->eop_last_line_data = malloc(bytes_per_line);
2007 if (! scanner->eop_last_line_data)
2010 memcpy (scanner->eop_last_line_data, buf, bytes_per_line);
2011 scanner->eop_last_line_data_rpos = 0;
2014 if (scanner->eop_trailing_lines_mode == TRAILING_LINES_MODE_RASTER)
2017 if (scanner->depth == DEPTH_COLOR_24)
2021 scanner->eop_last_line_data[k] = (k % 6 < 3 ? 0xff : 0);
2029 scanner->eop_last_line_data[k] = (k % 12 < 6 ? 0xff : 0);
2033 else if (scanner->eop_trailing_lines_mode == TRAILING_LINES_MODE_WHITE)
2035 memset (scanner->eop_last_line_data, 0xff, bytes_per_line);
2037 else if (scanner->eop_trailing_lines_mode == TRAILING_LINES_MODE_BLACK)
2039 memset (scanner->eop_last_line_data, 0x00, bytes_per_line);
2041 else if (scanner->eop_trailing_lines_mode == TRAILING_LINES_MODE_COLOR)
2045 rgb[0] = (scanner->eop_trailing_lines_color >> 16) & 0xff;
2046 rgb[1] = (scanner->eop_trailing_lines_color >> 8) & 0xff;
2047 rgb[2] = scanner->eop_trailing_lines_color & 0xff;
2048 if (scanner->depth == DEPTH_COLOR_24)
2052 scanner->eop_last_line_data[k] = rgb[k % 3];
2060 scanner->eop_last_line_data[k] = rgb[(k % 6) >> 1];
2070 j, scanner->eop_trailing_lines_mode, scanner->eop_trailing_lines_color);
2072 if ((scanner->source == SOURCE_ADF) || (scanner->source == SOURCE_ADF_DUPLEX))
2077 if (! scanner->adf_next_page_lines_data)
2081 scanner->adf_next_page_lines_data = malloc(buf_size);
2082 if (! scanner->adf_next_page_lines_data)
2084 scanner->adf_next_page_lines_data_size = buf_size;
2085 scanner->adf_next_page_lines_data_rpos = 0;
2086 scanner->adf_next_page_lines_data_wpos = 0;
2090 invert_negative_colors (buf, bytes_per_line, scanner);
2091 memcpy (scanner->adf_next_page_lines_data + scanner->adf_next_page_lines_data_wpos, buf, bytes_per_line);
2092 scanner->adf_next_page_lines_data_wpos += bytes_per_line;
2095 if (scanner->eop_trailing_lines_mode != TRAILING_LINES_MODE_RAW)
2100 memcpy (buf, scanner->eop_last_line_data, bytes_per_line);
2112 read_data_from_temporary_buffer(struct hp5590_scanner *scanner,
2117 if (scanner && scanner->one_line_read_buffer)
2122 rest_len = bytes_per_line - scanner->one_line_read_buffer_rpos;
2126 memcpy (data, scanner->one_line_read_buffer + scanner->one_line_read_buffer_rpos, rest_len);
2127 scanner->one_line_read_buffer_rpos += rest_len;
2128 scanner->transferred_image_size -= rest_len;
2133 *length, bytes_per_line - scanner->one_line_read_buffer_rpos);
2135 if (scanner->one_line_read_buffer_rpos >= bytes_per_line)
2138 free (scanner->one_line_read_buffer);
2139 scanner->one_line_read_buffer = NULL;
2140 scanner->one_line_read_buffer_rpos = 0;
2147 sane_read_internal (struct hp5590_scanner * scanner, SANE_Byte * data,
2155 scanner->transferred_image_size);
2159 if ((unsigned long long) *length > scanner->transferred_image_size)
2160 *length = (SANE_Int) scanner->transferred_image_size;
2165 if (scanner->depth == DEPTH_COLOR_48)
2184 scanner->scanning = SANE_FALSE;
2188 if (scanner->one_line_read_buffer)
2191 read_data_from_temporary_buffer (scanner, data, max_length, bytes_per_line, length);
2194 DBG (DBG_verbose, "Return %d bytes, left %llu bytes.\n", *length, scanner->transferred_image_size);
2215 if (! scanner->one_line_read_buffer)
2217 scanner->one_line_read_buffer = malloc (bytes_per_line);
2218 if (! scanner->one_line_read_buffer)
2220 memset (scanner->one_line_read_buffer, 0, bytes_per_line);
2227 scan_data = scanner->one_line_read_buffer;
2230 if (scanner->depth == DEPTH_COLOR_48)
2243 if ((scanner->source == SOURCE_ADF) || (scanner->source == SOURCE_ADF_DUPLEX))
2245 if (scanner->eop_last_line_data)
2255 unsigned int n2 = bytes_per_line - scanner->eop_last_line_data_rpos;
2257 memcpy (scan_data + wpos, scanner->eop_last_line_data + scanner->eop_last_line_data_rpos, n1);
2259 scanner->eop_last_line_data_rpos += n1;
2260 if (scanner->eop_last_line_data_rpos >= bytes_per_line)
2261 scanner->eop_last_line_data_rpos = 0;
2266 else if (scanner->adf_next_page_lines_data)
2274 (scanner->adf_next_page_lines_data_rpos < scanner->adf_next_page_lines_data_size))
2277 unsigned int n2 = scanner->adf_next_page_lines_data_size - scanner->adf_next_page_lines_data_rpos;
2279 memcpy (scan_data + wpos, scanner->adf_next_page_lines_data + scanner->adf_next_page_lines_data_rpos, n1);
2281 scanner->adf_next_page_lines_data_rpos += n1;
2282 if (scanner->adf_next_page_lines_data_rpos >= scanner->adf_next_page_lines_data_size)
2284 free (scanner->adf_next_page_lines_data);
2285 scanner->adf_next_page_lines_data = NULL;
2286 scanner->adf_next_page_lines_data_size = 0;
2287 scanner->adf_next_page_lines_data_rpos = 0;
2288 scanner->adf_next_page_lines_data_wpos = 0;
2299 /* Read data from scanner. */
2300 ret = hp5590_read (scanner->dn, scanner->proto_flags,
2302 scanner->bulk_read_state);
2305 scanner->scanning = SANE_FALSE;
2314 ret = convert_to_rgb (scanner, scan_data, scan_data_length);
2317 scanner->scanning = SANE_FALSE;
2321 ret = convert_gray_and_lineart (scanner, scan_data, scan_data_length);
2329 scanner->transferred_image_size -= scan_data_length;
2335 if (scanner->one_line_read_buffer)
2338 read_data_from_temporary_buffer (scanner, data, max_length, scan_data_length, length);
2346 DBG (DBG_verbose, "Return %d bytes, left %llu bytes\n", *length, scanner->transferred_image_size);
2445 struct hp5590_scanner *scanner = handle;
2451 scanner->transferred_image_size);
2455 scanner->scanning = SANE_FALSE;
2459 if (scanner->transferred_image_size == 0)
2464 ret = hp5590_inc_scan_count (scanner->dn, scanner->proto_flags);
2474 if (!scanner->bulk_read_state)
2476 ret = hp5590_low_init_bulk_read_state (&scanner->bulk_read_state);
2479 scanner->scanning = SANE_FALSE;
2485 ret = calc_image_params (scanner,
2492 ret = sane_read_internal(scanner, data, max_length, length, bytes_per_line);
2494 if ((ret == SANE_STATUS_GOOD) && (scanner->dpi == 2400) &&
2495 ((scanner->depth == DEPTH_COLOR_48) || (scanner->depth == DEPTH_COLOR_24)))
2505 SANE_Bool color_48 = (scanner->depth == DEPTH_COLOR_48);
2507 if (! scanner->color_shift_line_buffer1)
2509 scanner->color_shift_buffered_lines1 = 0;
2510 scanner->color_shift_line_buffer1 = malloc (bytes_per_line * offset_max);
2511 if (! scanner->color_shift_line_buffer1)
2513 memset (scanner->color_shift_line_buffer1, 0, bytes_per_line * offset_max);
2515 if (! scanner->color_shift_line_buffer2)
2517 scanner->color_shift_buffered_lines2 = 0;
2518 scanner->color_shift_line_buffer2 = malloc (bytes_per_line * offset_max);
2519 if (! scanner->color_shift_line_buffer2)
2521 memset (scanner->color_shift_line_buffer2, 0, bytes_per_line * offset_max);
2525 scanner->color_shift_buffered_lines2 = MY_MIN(n_lines, offset_max);
2526 copy_n_last_lines(data, n_lines, scanner->color_shift_line_buffer2, scanner->color_shift_buffered_lines2, bytes_per_line);
2528 shift_color_lines(data, n_lines, scanner->color_shift_line_buffer1, scanner->color_shift_buffered_lines1, 1, offset_part, color_48, bytes_per_line);
2529 shift_color_lines(data, n_lines, scanner->color_shift_line_buffer1, scanner->color_shift_buffered_lines1, 0, offset_max, color_48, bytes_per_line);
2531 append_and_move_lines(scanner->color_shift_line_buffer2, scanner->color_shift_buffered_lines2, scanner->color_shift_line_buffer1, &(scanner->color_shift_buffered_lines1), offset_max, bytes_per_line);
2541 struct hp5590_scanner *scanner = handle;
2546 scanner->scanning = SANE_FALSE;
2548 if (scanner->dn < 0)
2551 hp5590_low_free_bulk_read_state (&scanner->bulk_read_state);
2553 ret = hp5590_stop_scan (scanner->dn, scanner->proto_flags);