summaryrefslogtreecommitdiff
path: root/backend/genesys/low.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backend/genesys/low.cpp')
-rw-r--r--backend/genesys/low.cpp59
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());
}