From: Bastian Dehn Date: Sun, 25 Feb 2024 07:47:58 +0000 (+0100) Subject: add reload params with right color channels X-Git-Tag: v1.0.0^2~199 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=91a185602cdcaba33e416fb7bae1c61bda9f7591;p=sane-kds-s2000w-net.git add reload params with right color channels --- diff --git a/src/kds_s2000w_handler_opts.c b/src/kds_s2000w_handler_opts.c index b3a8591..e945d49 100644 --- a/src/kds_s2000w_handler_opts.c +++ b/src/kds_s2000w_handler_opts.c @@ -61,6 +61,26 @@ void _load_options(handler* h) resp = NULL; } +void _change_channels(handler* h) +{ + json_object* value_object = json_object_object_get(config, "ColorMode"); + const char* color_mode_value = json_object_get_string(value_object); + if (strcmp(color_mode_value, "Color") == 0) + h->current_metadata->channels = 3; + else + h->current_metadata->channels = 1; +} + +void _change_format(handler* h) +{ + json_object* value_object = json_object_object_get(config, "ColorMode"); + const char* color_mode_value = json_object_get_string(value_object); + if (strcmp(color_mode_value, "Color") == 0) + h->current_metadata->format = 1; + else + h->current_metadata->format = 0; +} + int _change_output_type_to_images() { json_object* value_object = json_object_object_get(config, "ColorMode"); @@ -138,15 +158,6 @@ void kds_s2000w_handler_get_option(handler* h, int option, void* value, int* in case 4: value_object = json_object_object_get(config, "ColorMode"); _write_string_value(value_object, value); - - if (strcmp(value, "Color") == 0) { - h->current_metadata->format = 1; - h->current_metadata->channels = 3; - } else { - h->current_metadata->format = 0; - h->current_metadata->channels = 1; - } - break; case 5: value_object = json_object_object_get(config, "SkipBlankPages"); @@ -267,6 +278,10 @@ void kds_s2000w_handler_set_option(handler* h, int option, void* value, int* inf if (_change_output_type_to_images()) *info = RELOAD_OPTIONS; + _change_channels(h); + _change_format(h); + *info |= RELOAD_PARAMS; + break; case 5: value_object = json_object_object_get(config, "SkipBlankPages"); diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index a25e900..b1e64da 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -125,13 +125,18 @@ SANE_Status _sane_kds_s2000w_net_get_parameters(SANE_Handle handle, debug_printf(ALL, "sane_kds_s2000w_net_get_parameters"); handler* h = (handler*) handle; + if (h->current_metadata->depth == 1) + h->current_metadata->bytes_per_line = h->current_metadata->channels * floor((h->current_metadata->pixels_per_line + 7) / 8); + else + h->current_metadata->bytes_per_line = h->current_metadata->channels * h->current_metadata->pixels_per_line * h->current_metadata->depth / 8; + metadata mdata; memcpy(&mdata, h->current_metadata, sizeof(metadata)); params->format = mdata.format; params->last_frame = mdata.is_last; - params->bytes_per_line = mdata.bytes_per_line; params->pixels_per_line = mdata.pixels_per_line; + params->bytes_per_line = mdata.bytes_per_line; params->lines = mdata.lines; params->depth = mdata.depth; diff --git a/tests/kds_s2000w_net_get_params_tests.c b/tests/kds_s2000w_net_get_params_tests.c index 29eb5bc..313310a 100644 --- a/tests/kds_s2000w_net_get_params_tests.c +++ b/tests/kds_s2000w_net_get_params_tests.c @@ -33,7 +33,7 @@ START_TEST(kds_s2000w_net_get_parameters_with_image_data) ck_assert_int_eq(params.format, 1); ck_assert_int_eq(params.last_frame, 0); - ck_assert_int_eq(params.bytes_per_line, 0); + ck_assert_int_eq(params.bytes_per_line, 3240); ck_assert_int_eq(params.pixels_per_line, 1080); ck_assert_int_eq(params.lines, 100); ck_assert_int_eq(params.depth, 8);