Esempio n. 1
0
SANE_Status
eds_jpeg_read_header(epsonds_scanner *s)
{
	epsonds_src_mgr *src = (epsonds_src_mgr *)s->jpeg_cinfo.src;

	if (jpeg_read_header(&s->jpeg_cinfo, TRUE)) {

		s->jdst = sanei_jpeg_jinit_write_ppm(&s->jpeg_cinfo);

		if (jpeg_start_decompress(&s->jpeg_cinfo)) {

			int size;

			DBG(3, "%s: w: %d, h: %d, components: %d\n",
				__func__,
				s->jpeg_cinfo.output_width, s->jpeg_cinfo.output_height,
				s->jpeg_cinfo.output_components);

			size = s->jpeg_cinfo.output_width * s->jpeg_cinfo.output_components * 1;

			src->linebuffer = (*s->jpeg_cinfo.mem->alloc_large)((j_common_ptr)&s->jpeg_cinfo,
				JPOOL_PERMANENT, size);

			src->linebuffer_size = 0;
			src->linebuffer_index = 0;

			s->jpeg_header_seen = 1;

			return SANE_STATUS_GOOD;

		} else {
			DBG(0, "%s: decompression failed\n", __func__);
			return SANE_STATUS_IO_ERROR;
		}
	} else {
		DBG(0, "%s: cannot read JPEG header\n", __func__);
		return SANE_STATUS_IO_ERROR;
	}
}
Esempio n. 2
0
SANE_Status
sane_start (SANE_Handle handle)
{

  DBG (127, "sane_start called\n");
  if (handle != MAGIC || !is_open ||
      (Camera.current_picture_number == 0 && dc210_opt_snap == SANE_FALSE))
    return SANE_STATUS_INVAL;	/* Unknown handle ... */

  if (Camera.scanning)
    return SANE_STATUS_EOF;

  if (dc210_opt_snap)
    {

      /*
       * Don't allow picture unless there is room in the 
       * camera.
       */
      if (Camera.pic_left == 0)
	{
	  DBG (3, "No room to store new picture\n");
	  return SANE_STATUS_INVAL;
	}


      if (snap_pic (Camera.fd) != SANE_STATUS_GOOD)
	{
	  DBG (1, "Failed to snap new picture\n");
	  return SANE_STATUS_INVAL;
	}
    }

  if (dc210_opt_thumbnails)
    {

      thumb_pck[3] = (unsigned char) Camera.current_picture_number - 1;
      thumb_pck[4] = 1;

      if (send_pck (Camera.fd, thumb_pck) == -1)
	{
	  DBG (4, "sane_start: error: send_pck returned -1\n");
	  return SANE_STATUS_INVAL;
	}

      parms.bytes_per_line = 96 * 3;
      parms.pixels_per_line = 96;
      parms.lines = 72;

      bytes_in_buffer = 0;
      bytes_read_from_buffer = 0;

    }
  else
    {
      my_src_ptr src;

      struct jpeg_error_mgr jerr;
      int row_stride;

      pic_pck[3] = (unsigned char) Camera.current_picture_number - 1;

      if (send_pck (Camera.fd, pic_pck) == -1)
	{
	  DBG (4, "sane_start: error: send_pck returned -1\n");
	  return SANE_STATUS_INVAL;
	}
      cinfo.err = jpeg_std_error (&jerr);
      jpeg_create_decompress (&cinfo);

      cinfo.src = (struct jpeg_source_mgr *) (*cinfo.mem->alloc_small) ((j_common_ptr) & cinfo, JPOOL_PERMANENT, sizeof (my_source_mgr));
      src = (my_src_ptr) cinfo.src;

      src->buffer = (JOCTET *) (*cinfo.mem->alloc_small) ((j_common_ptr) &
							  cinfo,
							  JPOOL_PERMANENT,
							  1024 *
							  sizeof (JOCTET));
      src->pub.init_source = sanei_jpeg_init_source;
      src->pub.fill_input_buffer = sanei_jpeg_fill_input_buffer;
      src->pub.skip_input_data = sanei_jpeg_skip_input_data;
      src->pub.resync_to_restart = jpeg_resync_to_restart;	/* default */
      src->pub.term_source = sanei_jpeg_term_source;
      src->pub.bytes_in_buffer = 0;
      src->pub.next_input_byte = NULL;

      (void) jpeg_read_header (&cinfo, TRUE);
      dest_mgr = sanei_jpeg_jinit_write_ppm (&cinfo);
      (void) jpeg_start_decompress (&cinfo);
      row_stride = cinfo.output_width * cinfo.output_components;

    }

  Camera.scanning = SANE_TRUE;	/* don't overlap scan requests */
  total_bytes_read = 0;

  return SANE_STATUS_GOOD;
}