diff options
Diffstat (limited to 'backend/genesys/low.cpp')
| -rw-r--r-- | backend/genesys/low.cpp | 59 | 
1 files changed, 32 insertions, 27 deletions
| diff --git a/backend/genesys/low.cpp b/backend/genesys/low.cpp index ddd2c88..a6da2c1 100644 --- a/backend/genesys/low.cpp +++ b/backend/genesys/low.cpp @@ -17,27 +17,6 @@     You should have received a copy of the GNU General Public License     along with this program.  If not, see <https://www.gnu.org/licenses/>. - -   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.  */  #define DEBUG_DECLARE_ONLY @@ -442,7 +421,11 @@ Image read_unshuffled_image_from_scanner(Genesys_Device* dev, const ScanSession&      }      if (dev->model->is_cis && session.params.channels == 3) { -        pipeline.push_node<ImagePipelineNodeMergeMonoLines>(dev->model->line_mode_color_order); +        pipeline.push_node<ImagePipelineNodeMergeMonoLinesToColor>(dev->model->line_mode_color_order); +    } + +    if (session.use_host_side_gray) { +        pipeline.push_node<ImagePipelineNodeMergeColorToGray>();      }      if (pipeline.get_output_format() == PixelFormat::BGR888) { @@ -540,7 +523,7 @@ Image read_shuffled_image_from_scanner(Genesys_Device* dev, const ScanSession& s      }      if (dev->model->is_cis && session.params.channels == 3) { -        pipeline.push_node<ImagePipelineNodeMergeMonoLines>(dev->model->line_mode_color_order); +        pipeline.push_node<ImagePipelineNodeMergeMonoLinesToColor>(dev->model->line_mode_color_order);      }      if (pipeline.get_output_format() == PixelFormat::BGR888) { @@ -638,11 +621,16 @@ bool should_enable_gamma(const ScanSession& session, const Genesys_Sensor& senso      if ((session.params.flags & ScanFlag::DISABLE_GAMMA) != ScanFlag::NONE) {          return false;      } -    if (sensor.gamma[0] == 1.0f || sensor.gamma[1] == 1.0f || sensor.gamma[2] == 1.0f) { +    if (session.params.depth == 16) {          return false;      } -    if (session.params.depth == 16) +    if (session.params.brightness_adjustment != 0 || session.params.contrast_adjustment != 0) { +        return true; +    } + +    if (sensor.gamma[0] == 1.0f || sensor.gamma[1] == 1.0f || sensor.gamma[2] == 1.0f) {          return false; +    }      return true;  } @@ -949,6 +937,14 @@ void compute_session(const Genesys_Device* dev, ScanSession& s, const Genesys_Se      s.output_startx = static_cast<unsigned>(                  static_cast<int>(s.params.startx) + sensor.output_pixel_offset); +    if (has_flag(dev->model->flags, ModelFlag::HOST_SIDE_GRAY) && s.params.channels == 1 && +        s.params.color_filter == ColorFilter::NONE) +    { +        s.use_host_side_gray = true; +        s.params.channels = 3; +        s.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS; +    } +      s.stagger_x = sensor.stagger_x;      s.stagger_y = sensor.stagger_y; @@ -1114,7 +1110,8 @@ void compute_session(const Genesys_Device* dev, ScanSession& s, const Genesys_Se          dev->model->asic_type == AsicType::GL845 ||          dev->model->asic_type == AsicType::GL846)      { -        s.enable_ledadd = (s.params.channels == 1 && dev->model->is_cis && dev->settings.true_gray); +        s.enable_ledadd = (s.params.channels == 1 && dev->model->is_cis && +                           s.params.color_filter == ColorFilter::NONE);      }      s.use_host_side_calib = sensor.use_host_side_calib; @@ -1212,7 +1209,7 @@ ImagePipelineStack build_image_pipeline(const Genesys_Device& dev, const ScanSes      }      if (dev.model->is_cis && session.params.channels == 3) { -        pipeline.push_node<ImagePipelineNodeMergeMonoLines>(dev.model->line_mode_color_order); +        pipeline.push_node<ImagePipelineNodeMergeMonoLinesToColor>(dev.model->line_mode_color_order);          if (log_image_data) {              pipeline.push_node<ImagePipelineNodeDebug>(debug_prefix + "_4_after_merge_mono.tiff"); @@ -1274,6 +1271,14 @@ ImagePipelineStack build_image_pipeline(const Genesys_Device& dev, const ScanSes          }      } +    if (session.use_host_side_gray) { +        pipeline.push_node<ImagePipelineNodeMergeColorToGray>(); + +        if (log_image_data) { +            pipeline.push_node<ImagePipelineNodeDebug>(debug_prefix + "_10_after_nogray.tiff"); +        } +    } +      if (pipeline.get_output_width() != session.params.get_requested_pixels()) {          pipeline.push_node<ImagePipelineNodeScaleRows>(session.params.get_requested_pixels());      } | 
