]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
integrate get metadata from image
authorBastian Dehn <hhaalo@arcor.de>
Wed, 1 May 2024 12:15:58 +0000 (14:15 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Wed, 1 May 2024 12:15:58 +0000 (14:15 +0200)
src/kds_s2000w_handler.c
tests/kds_s2000w_net_tests.c
tests/kds_s2000w_net_tests_run.c

index 826aa3e14b0413aa96d8c3e4942e43e1db869ebf..9451b983ae12417423cb909f28d4155696fd104c 100644 (file)
 void _get_current_metadata(handler* h)
 {
        debug_printf(ALL, "get_current_metadata");
-       json_object* metadataResp = NULL;
        json_object* metadata = NULL;
-       json_object* mdata_value = NULL;
        json_object* config = NULL;
        blobdata* jpg_image = NULL;
        blobdata* pnm_image = NULL;
-       response* resp = NULL;
-
-       resp = kds_s2000w_client_response_init();
-       kds_s2000w_client_get_metadata(h->sessionid, h->current_scan_status->current_image_number, resp);
-       if (resp->error_size > 0)
-               fprintf(stderr, "%s\n", resp->error_status);
+       image_metadata* mdata = NULL;
 
-       if (resp->code != 200) {
-               h->current_metadata->valid = 0;
-               kds_s2000w_client_response_free(resp);
-               resp = NULL;
-               return;
-       }
+       mdata = malloc(sizeof(image_metadata));
 
        h->current_metadata->valid = 0;
        h->current_metadata->channels = 1;
 
-       metadataResp = json_tokener_parse(resp->data);
-       metadata = json_object_object_get(metadataResp, "Metadata");
-       mdata_value = json_object_object_get(metadata, "BitDepth");
-       h->current_metadata->depth = json_object_get_int(mdata_value);
-       mdata_value = NULL;
-
-       mdata_value = json_object_object_get(metadata, "ImageWidth");
-       h->current_metadata->pixels_per_line = json_object_get_int(mdata_value);
-       mdata_value = NULL;
-
-       mdata_value = json_object_object_get(metadata, "ImageHeight");
-       h->current_metadata->lines = json_object_get_int(mdata_value);
-       mdata_value = NULL;
-
-       json_object_put(metadataResp);
-       metadata = NULL;
        config = json_object_object_get(h->current_scanner_config, "Configuration");
        metadata = json_object_object_get(config, "ColorMode");
        const char* color_value = json_object_get_string(metadata);
-       mdata_value = NULL;
 
        if (strcmp(color_value, "Color") == 0)
                h->current_metadata->format = 1;
@@ -69,6 +40,12 @@ void _get_current_metadata(handler* h)
 
        jpg_image = (blobdata*) h->jpg_image;
        pnm_image = (blobdata*) h->pnm_image;
+
+       kds_s2000w_metadata_from_image(jpg_image, mdata);
+       h->current_metadata->depth = mdata->depth;
+       h->current_metadata->pixels_per_line = mdata->width;
+       h->current_metadata->lines = mdata->height;
+
        if (h->current_metadata->depth > 8) {
                h->current_metadata->depth = 8;
                kds_s2000w_convert_jpg_to_pnm_with_depth(jpg_image, pnm_image, h->current_metadata->depth);
@@ -87,8 +64,8 @@ void _get_current_metadata(handler* h)
        h->current_metadata->is_last = 1;
        
        metadata = NULL;
-       kds_s2000w_client_response_free(resp);
-       resp = NULL;
+       free(mdata);
+       mdata = NULL;
 }
 
 void _delete_current_image(handler* h)
index 2408ccbcdda5fe54570bf254157445db9de4d205..d803b1afc5d4c2bfb01d1122007714096c289230 100644 (file)
@@ -152,14 +152,11 @@ void sane_kds_s2000w_net_start(void** state)
        will_return(__wrap_kds_s2000w_client_status_session, 0);
        will_return(mock_response, response_list[2]);
        will_return(__wrap_kds_s2000w_client_get_image, 0);
-       will_return(mock_response, response_list[1]);
-       will_return(__wrap_kds_s2000w_client_get_metadata, 0);
        will_return(mock_response, response_list[0]);
        will_return(__wrap_kds_s2000w_client_delete_image, 0);
        expect_function_call(__wrap_kds_s2000w_client_start_scan);
        expect_function_call(__wrap_kds_s2000w_client_status_session);
        expect_function_call(__wrap_kds_s2000w_client_get_image);
-       expect_function_call(__wrap_kds_s2000w_client_get_metadata);
        expect_function_call(__wrap_kds_s2000w_client_delete_image);
        handler* h = init_handler();
        const char* test_config = "{\"Configuration\": { \"ColorMode\": \"Color\" } }";
@@ -172,8 +169,8 @@ void sane_kds_s2000w_net_start(void** state)
        assert_int_equal(h->current_metadata->depth, 8);
        assert_int_equal(h->current_metadata->channels, 3);
        assert_int_equal(h->current_metadata->format, 1);
-       assert_int_equal(h->current_metadata->pixels_per_line, 1920);
-       assert_int_equal(h->current_metadata->lines, 1080);
+       assert_int_equal(h->current_metadata->pixels_per_line, 2);
+       assert_int_equal(h->current_metadata->lines, 1);
        assert_int_equal(h->current_metadata->valid, 1);
        assert_int_equal(h->current_metadata->is_last, 1);
 
@@ -209,8 +206,6 @@ void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state)
        will_return(__wrap_kds_s2000w_client_status_session, 0);
        will_return(mock_response, response_list[2]);
        will_return(__wrap_kds_s2000w_client_get_image, 0);
-       will_return(mock_response, response_list[1]);
-       will_return(__wrap_kds_s2000w_client_get_metadata, 0);
        will_return(mock_response, response_list[0]);
        will_return(__wrap_kds_s2000w_client_delete_image, 0);
        response* resp_open_session = kds_s2000w_client_response_init();
@@ -228,7 +223,6 @@ void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state)
        expect_function_call(__wrap_kds_s2000w_client_start_scan);
        expect_function_call(__wrap_kds_s2000w_client_status_session);
        expect_function_call(__wrap_kds_s2000w_client_get_image);
-       expect_function_call(__wrap_kds_s2000w_client_get_metadata);
        expect_function_call(__wrap_kds_s2000w_client_delete_image);
        expect_function_call(__wrap_kds_s2000w_client_close_session);
        expect_function_call(__wrap_kds_s2000w_client_open_session);
@@ -245,8 +239,8 @@ void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state)
        assert_int_equal(h->current_metadata->depth, 8);
        assert_int_equal(h->current_metadata->channels, 3);
        assert_int_equal(h->current_metadata->format, 1);
-       assert_int_equal(h->current_metadata->pixels_per_line, 1920);
-       assert_int_equal(h->current_metadata->lines, 1080);
+       assert_int_equal(h->current_metadata->pixels_per_line, 2);
+       assert_int_equal(h->current_metadata->lines, 1);
        assert_int_equal(h->current_metadata->valid, 1);
        assert_int_equal(h->current_metadata->is_last, 1);
 
@@ -286,8 +280,6 @@ void sane_kds_s2000w_net_start_one_page_per_feeder(void** state)
        will_return(__wrap_kds_s2000w_client_status_session, 0);
        will_return(mock_response, response_list[2]);
        will_return(__wrap_kds_s2000w_client_get_image, 0);
-       will_return(mock_response, response_list[1]);
-       will_return(__wrap_kds_s2000w_client_get_metadata, 0);
        will_return(mock_response, response_list[0]);
        will_return(__wrap_kds_s2000w_client_delete_image, 0);
        response* resp_open_session = kds_s2000w_client_response_init();
@@ -305,7 +297,6 @@ void sane_kds_s2000w_net_start_one_page_per_feeder(void** state)
        expect_function_call(__wrap_kds_s2000w_client_start_scan);
        expect_function_call(__wrap_kds_s2000w_client_status_session);
        expect_function_call(__wrap_kds_s2000w_client_get_image);
-       expect_function_call(__wrap_kds_s2000w_client_get_metadata);
        expect_function_call(__wrap_kds_s2000w_client_delete_image);
        expect_function_call(__wrap_kds_s2000w_client_close_session);
        expect_function_call(__wrap_kds_s2000w_client_open_session);
@@ -321,8 +312,8 @@ void sane_kds_s2000w_net_start_one_page_per_feeder(void** state)
        assert_int_equal(h->current_metadata->depth, 8);
        assert_int_equal(h->current_metadata->channels, 3);
        assert_int_equal(h->current_metadata->format, 1);
-       assert_int_equal(h->current_metadata->pixels_per_line, 1920);
-       assert_int_equal(h->current_metadata->lines, 1080);
+       assert_int_equal(h->current_metadata->pixels_per_line, 2);
+       assert_int_equal(h->current_metadata->lines, 1);
        assert_int_equal(h->current_metadata->valid, 1);
        assert_int_equal(h->current_metadata->is_last, 1);
 
@@ -362,8 +353,6 @@ void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state)
        will_return(__wrap_kds_s2000w_client_status_session, 0);
        will_return(mock_response, response_list[2]);
        will_return(__wrap_kds_s2000w_client_get_image, 0);
-       will_return(mock_response, response_list[1]);
-       will_return(__wrap_kds_s2000w_client_get_metadata, 0);
        will_return(mock_response, response_list[0]);
        will_return(__wrap_kds_s2000w_client_delete_image, 0);
        response* resp_stop_scan = kds_s2000w_client_response_init();
@@ -373,7 +362,6 @@ void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state)
        expect_function_call(__wrap_kds_s2000w_client_start_scan);
        expect_function_call(__wrap_kds_s2000w_client_status_session);
        expect_function_call(__wrap_kds_s2000w_client_get_image);
-       expect_function_call(__wrap_kds_s2000w_client_get_metadata);
        expect_function_call(__wrap_kds_s2000w_client_delete_image);
        expect_function_call(__wrap_kds_s2000w_client_stop_scan);
 
@@ -400,8 +388,6 @@ void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state)
        will_return(__wrap_kds_s2000w_client_status_session, 0);
        will_return(mock_response, response_list[2]);
        will_return(__wrap_kds_s2000w_client_get_image, 0);
-       will_return(mock_response, response_list[1]);
-       will_return(__wrap_kds_s2000w_client_get_metadata, 0);
        will_return(mock_response, response_list[0]);
        will_return(__wrap_kds_s2000w_client_delete_image, 0);
        response* resp_open_session = kds_s2000w_client_response_init();
@@ -418,7 +404,6 @@ void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state)
        will_return(__wrap_kds_s2000w_client_set_option, 0);
        expect_function_call(__wrap_kds_s2000w_client_status_session);
        expect_function_call(__wrap_kds_s2000w_client_get_image);
-       expect_function_call(__wrap_kds_s2000w_client_get_metadata);
        expect_function_call(__wrap_kds_s2000w_client_delete_image);
        expect_function_call(__wrap_kds_s2000w_client_close_session);
        expect_function_call(__wrap_kds_s2000w_client_open_session);
@@ -430,8 +415,8 @@ void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state)
        assert_int_equal(h->current_metadata->depth, 8);
        assert_int_equal(h->current_metadata->channels, 3);
        assert_int_equal(h->current_metadata->format, 1);
-       assert_int_equal(h->current_metadata->pixels_per_line, 1920);
-       assert_int_equal(h->current_metadata->lines, 1080);
+       assert_int_equal(h->current_metadata->pixels_per_line, 2);
+       assert_int_equal(h->current_metadata->lines, 1);
        assert_int_equal(h->current_metadata->valid, 1);
        assert_int_equal(h->current_metadata->is_last, 1);
 
@@ -473,14 +458,11 @@ void sane_kds_s2000w_net_start_slow_two_pages_per_feeder(void** state)
        will_return(__wrap_kds_s2000w_client_status_session, 0);
        will_return(mock_response, response_list[2]);
        will_return(__wrap_kds_s2000w_client_get_image, 0);
-       will_return(mock_response, response_list[1]);
-       will_return(__wrap_kds_s2000w_client_get_metadata, 0);
        will_return(mock_response, response_list[0]);
        will_return(__wrap_kds_s2000w_client_delete_image, 0);
        expect_function_call(__wrap_kds_s2000w_client_start_scan);
        expect_function_call(__wrap_kds_s2000w_client_status_session);
        expect_function_call(__wrap_kds_s2000w_client_get_image);
-       expect_function_call(__wrap_kds_s2000w_client_get_metadata);
        expect_function_call(__wrap_kds_s2000w_client_delete_image);
 
        handler* h = init_handler();
@@ -508,8 +490,6 @@ void sane_kds_s2000w_net_start_slow_two_pages_per_feeder(void** state)
        will_return(__wrap_kds_s2000w_client_status_session, 0);
        will_return(mock_response, response_list[2]);
        will_return(__wrap_kds_s2000w_client_get_image, 0);
-       will_return(mock_response, response_list[1]);
-       will_return(__wrap_kds_s2000w_client_get_metadata, 0);
        will_return(mock_response, response_list[0]);
        will_return(__wrap_kds_s2000w_client_delete_image, 0);
        response* resp_open_session = kds_s2000w_client_response_init();
@@ -526,7 +506,6 @@ void sane_kds_s2000w_net_start_slow_two_pages_per_feeder(void** state)
        will_return(__wrap_kds_s2000w_client_set_option, 0);
        expect_function_call(__wrap_kds_s2000w_client_status_session);
        expect_function_call(__wrap_kds_s2000w_client_get_image);
-       expect_function_call(__wrap_kds_s2000w_client_get_metadata);
        expect_function_call(__wrap_kds_s2000w_client_delete_image);
        expect_function_call(__wrap_kds_s2000w_client_close_session);
        expect_function_call(__wrap_kds_s2000w_client_open_session);
@@ -538,8 +517,8 @@ void sane_kds_s2000w_net_start_slow_two_pages_per_feeder(void** state)
        assert_int_equal(h->current_metadata->depth, 8);
        assert_int_equal(h->current_metadata->channels, 3);
        assert_int_equal(h->current_metadata->format, 1);
-       assert_int_equal(h->current_metadata->pixels_per_line, 1920);
-       assert_int_equal(h->current_metadata->lines, 1080);
+       assert_int_equal(h->current_metadata->pixels_per_line, 2);
+       assert_int_equal(h->current_metadata->lines, 1);
        assert_int_equal(h->current_metadata->valid, 1);
        assert_int_equal(h->current_metadata->is_last, 1);
 
index 65bfb9e308c095c60f04d817a0bcbcc294f97402..9d444f74ac8c5b4d40cf352334d1fc8c74d8eb5d 100644 (file)
@@ -23,7 +23,23 @@ int setup_net_start(void** state)
        response_list[1]->size = 107;
        response_list[2] = kds_s2000w_client_response_init();
        response_list[2]->code = 200;
-       response_list[2]->size = 1;
+       response_list[2]->size = 17;
+       response_list[2]->data = realloc(response_list[2]->data, 17);
+       char* image_data = (char*) response_list[2]->data;
+       image_data[0] = 0x50;
+       image_data[1] = 0x36;
+       image_data[2] = 0x0a;
+       image_data[3] = 0x32;
+       image_data[4] = 0x20;
+       image_data[5] = 0x31;
+       image_data[6] = 0x0a;
+       image_data[7] = 0x32;
+       image_data[8] = 0x35;
+       image_data[9] = 0x35;
+       image_data[10] = 0x0a;
+       for (int i = 11; i < 17; i++) {
+               image_data[i] = 0xff;
+       }
        response_list[3] = NULL;
        *state = response_list;