From 5d7e15cab1d39f965827dd3d17be3664f8a6cd78 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Wed, 1 May 2024 14:15:58 +0200 Subject: [PATCH] integrate get metadata from image --- src/kds_s2000w_handler.c | 43 ++++++++------------------------ tests/kds_s2000w_net_tests.c | 41 ++++++++---------------------- tests/kds_s2000w_net_tests_run.c | 18 ++++++++++++- 3 files changed, 37 insertions(+), 65 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index 826aa3e..9451b98 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -11,49 +11,20 @@ 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) diff --git a/tests/kds_s2000w_net_tests.c b/tests/kds_s2000w_net_tests.c index 2408ccb..d803b1a 100644 --- a/tests/kds_s2000w_net_tests.c +++ b/tests/kds_s2000w_net_tests.c @@ -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); diff --git a/tests/kds_s2000w_net_tests_run.c b/tests/kds_s2000w_net_tests_run.c index 65bfb9e..9d444f7 100644 --- a/tests/kds_s2000w_net_tests_run.c +++ b/tests/kds_s2000w_net_tests_run.c @@ -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; -- 2.39.5