diff options
Diffstat (limited to 'backend/pieusb_buffer.h')
-rw-r--r-- | backend/pieusb_buffer.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/backend/pieusb_buffer.h b/backend/pieusb_buffer.h new file mode 100644 index 0000000..3724a40 --- /dev/null +++ b/backend/pieusb_buffer.h @@ -0,0 +1,93 @@ +/* sane - Scanner Access Now Easy. + + pieusb_buffer.h + + Copyright (C) 2012-2015 Jan Vleeshouwers, Michael Rickmann, Klaus Kaempf + + This file is part of the SANE package. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + As a special exception, the authors of SANE give permission for + additional uses of the libraries contained in this release of SANE. + + The exception is that, if you link a SANE library with other files + to produce an executable, this does not by itself cause the + resulting executable to be covered by the GNU General Public + License. Your use of that executable is in no way restricted on + account of linking the SANE library code into it. + + This exception does not, however, invalidate any other reasons why + the executable file might be covered by the GNU General Public + License. + + If you submit changes to SANE to the maintainers to be included in + a subsequent release, you agree by submitting the changes that + those changes may be distributed with this exception intact. + + If you write modifications of your own for SANE, it is your choice + whether to permit this exception to apply to your modifications. + If you do not wish that, delete this exception notice. */ + +#ifndef PIEUSB_BUFFER_H +#define PIEUSB_BUFFER_H + +#include "pieusb.h" +#include "../include/sane/sanei_ir.h" + +struct Pieusb_Read_Buffer +{ + SANE_Uint* data; /* image data - always store as 16 bit values; mmap'ed */ + unsigned int data_size; /* size of mmap region */ + SANE_Int data_file; /* associated file if memory mapped */ + char buffer_name[L_tmpnam]; + + /* Buffer parameters */ + SANE_Int width; /* number of pixels on a line */ + SANE_Int height; /* number of lines in buffer */ + SANE_Int colors; /* number of colors in a pixel */ + SANE_Int depth; /* number of bits of a color */ + SANE_Int packing_density; /* number of single color samples packed together */ + + /* Derived quantities + * All derived quantities pertain to the image, not to the buffer */ + SANE_Int packet_size_bytes; /* number of bytes of a packet of samples = round_up(depth*packing_density/8) */ + SANE_Int line_size_packets; /* number of packets on a single color line = round-down((width+packing_density-1)/packing_density) */ + SANE_Int line_size_bytes; /* number of bytes on a single color line = line_size_packets*packet_size_bytes */ + SANE_Int image_size_bytes; /* total number of bytes in the buffer (= colors * height * line_size_packets* packet_size_bytes) */ + SANE_Int color_index_red; /* color index of the red color plane (-1 if not used) */ + SANE_Int color_index_green; /* color index of the green color plane (-1 if not used) */ + SANE_Int color_index_blue; /* color index of the blue color plane (-1 if not used) */ + SANE_Int color_index_infrared; /* color index of the infrared color plane (-1 if not used) */ + + /* Reading - byte oriented */ + SANE_Uint** p_read; /* array of pointers to next sample to read for each color plane */ + SANE_Int read_index[4]; /* location where to read next (color-index, height-index, width-index, byte-index) */ + SANE_Int bytes_read; /* number of bytes read from the buffer */ + SANE_Int bytes_unread; /* number of bytes not yet read from the buffer */ + SANE_Int bytes_written; /* number of bytes written to the buffer */ + + /* Writing */ + SANE_Uint** p_write; /* array of pointers to next byte to write for each color plane */ +}; + +void sanei_pieusb_buffer_get(struct Pieusb_Read_Buffer* buffer, SANE_Byte* data, SANE_Int max_len, SANE_Int* len); +SANE_Status sanei_pieusb_buffer_create(struct Pieusb_Read_Buffer* buffer, SANE_Int width, SANE_Int height, SANE_Byte colors, SANE_Byte depth); +void sanei_pieusb_buffer_delete(struct Pieusb_Read_Buffer* buffer); +SANE_Int sanei_pieusb_buffer_put_full_color_line(struct Pieusb_Read_Buffer* buffer, void* line, int size); +SANE_Int sanei_pieusb_buffer_put_single_color_line(struct Pieusb_Read_Buffer* buffer, SANE_Byte color, void* line, SANE_Int size); + +#endif /* PIEUSB_BUFFER_H */ |