]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
add reload params with right color channels
authorBastian Dehn <hhaalo@arcor.de>
Sun, 25 Feb 2024 07:47:58 +0000 (08:47 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 25 Feb 2024 07:55:49 +0000 (08:55 +0100)
src/kds_s2000w_handler_opts.c
src/kds_s2000w_net.c
tests/kds_s2000w_net_get_params_tests.c

index b3a85918ca0f9f052d42f9914c5c0922ccd29b85..e945d4958a5473ba7389470df5b0d8b30563da34 100644 (file)
@@ -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");
index a25e900d0784965e5838a14ecd851fb159898a4a..b1e64da86b5810a81f233ab23d4d8f29c061eca8 100644 (file)
@@ -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;
 
index 29eb5bcaf00dfdac048761bc7de7a2e88ae180f3..313310a1b59216ca177bd0fef78413c895081e68 100644 (file)
@@ -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);