resp = kds_s2000w_client_response_init();
kds_s2000w_client_get_metadata(h->sessionid, h->current_scan_status->current_image_number, resp);
if (resp->code != 200) {
- h->current_metadata.valid = 0;
+ h->current_metadata->valid = 0;
kds_s2000w_client_response_free(resp);
resp = NULL;
return;
}
- h->current_metadata.valid = 0;
+ h->current_metadata->valid = 0;
json_object* metadataResp = NULL;
json_object* metadata = NULL;
json_object* mdata_value = NULL;
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);
+ h->current_metadata->depth = json_object_get_int(mdata_value);
mdata_value = NULL;
mdata_value = json_object_object_get(metadata, "ImageSize");
- h->current_metadata.size = json_object_get_int(mdata_value);
+ h->current_metadata->size = 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);
+ 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);
+ h->current_metadata->lines = json_object_get_int(mdata_value);
mdata_value = NULL;
json_object_put(metadataResp);
mdata_value = NULL;
if (strcmp(color_value, "Color") == 0)
- h->current_metadata.format = 1;
+ h->current_metadata->format = 1;
if (strcmp(color_value, "Gray") == 0)
- h->current_metadata.format = 0;
+ h->current_metadata->format = 0;
if (strcmp(color_value, "BW") == 0)
- h->current_metadata.format = 0;
+ h->current_metadata->format = 0;
- if (h->current_metadata.format == 1)
+ if (h->current_metadata->format == 1)
channels = 3;
if (pnm_image.size > 0) {
pnm_image.data = NULL;
pnm_image.size = 0;
}
- if (h->current_metadata.depth > 8) {
- h->current_metadata.depth = 8;
- kds_s2000w_convert_jpg_to_pnm_With_depth(&image, &pnm_image, h->current_metadata.depth);
+ if (h->current_metadata->depth > 8) {
+ h->current_metadata->depth = 8;
+ kds_s2000w_convert_jpg_to_pnm_With_depth(&image, &pnm_image, h->current_metadata->depth);
} else {
kds_s2000w_convert_jpg_to_pnm(&image, &pnm_image);
}
- h->current_metadata.size = pnm_image.size;
- h->current_metadata.image = pnm_image.data;
+ h->current_metadata->size = pnm_image.size;
+ h->current_metadata->image = pnm_image.data;
debug_printf_int(DEBUG, "size of pnm image", pnm_image.size);
- if (h->current_metadata.depth == 1)
- h->current_metadata.bytes_per_line = channels * floor((h->current_metadata.pixels_per_line + 7) / 8);
+ if (h->current_metadata->depth == 1)
+ h->current_metadata->bytes_per_line = channels * floor((h->current_metadata->pixels_per_line + 7) / 8);
else
- h->current_metadata.bytes_per_line = channels * h->current_metadata.pixels_per_line * h->current_metadata.depth / 8;
+ h->current_metadata->bytes_per_line = channels * h->current_metadata->pixels_per_line * h->current_metadata->depth / 8;
- h->current_metadata.valid = 1;
- h->current_metadata.is_last = 0;
+ h->current_metadata->valid = 1;
+ h->current_metadata->is_last = 0;
metadata = NULL;
kds_s2000w_client_response_free(resp);
h->current_scan_status->available_images = 0;
h->current_scan_status->downloaded_images = 0;
h->current_scan_status->complete_scanned = 0;
- h->current_metadata.format = 0;
- h->current_metadata.is_last = 0;
- h->current_metadata.size = 0;
- h->current_metadata.bytes_per_line = 0;
- h->current_metadata.pixels_per_line = 0;
- h->current_metadata.lines = 0;
- h->current_metadata.depth = 0;
- h->current_metadata.valid = 0;
- h->current_metadata.scanned_all_complete = 0;
- h->current_metadata.image = NULL;
+ h->current_metadata = malloc(sizeof(metadata));
+ h->current_metadata->format = 0;
+ h->current_metadata->is_last = 0;
+ h->current_metadata->size = 0;
+ h->current_metadata->bytes_per_line = 0;
+ h->current_metadata->pixels_per_line = 0;
+ h->current_metadata->lines = 0;
+ h->current_metadata->depth = 0;
+ h->current_metadata->valid = 0;
+ h->current_metadata->scanned_all_complete = 0;
+ h->current_metadata->image = NULL;
h->read_info.scan_started = 0;
h->read_info.cancel = 0;
h->read_info.read_size = 0;
h->current_scan_status->available_images = 0;
h->current_scan_status->downloaded_images = 0;
h->current_scan_status->complete_scanned = 0;
- h->current_metadata.scanned_all_complete = 0;
+ h->current_metadata->scanned_all_complete = 0;
return;
}
image.data = NULL;
free(h->current_scan_status);
h->current_scan_status = NULL;
+ free(h->current_metadata->image);
+ h->current_metadata->image = NULL;
+ free(h->current_metadata);
+ h->current_metadata = NULL;
free(h);
h = NULL;
}
resp = NULL;
}
-metadata kds_s2000w_handler_get_parameters(void* handle)
+void kds_s2000w_handler_get_parameters(void* handle)
{
debug_printf(ALL, "kds_s2000w_handler_get_parameters");
handler* h = (handler*) handle;
if (h->current_scan_status->complete_scanned
&& h->current_scan_status->downloaded_images == h->current_scan_status->available_images) {
- h->current_metadata.valid = 1;
- h->current_metadata.scanned_all_complete = 1;
- h->current_metadata.is_last = 1;
- return h->current_metadata;
+ h->current_metadata->valid = 1;
+ h->current_metadata->scanned_all_complete = 1;
+ h->current_metadata->is_last = 1;
+ return;
}
if (h->current_scan_status->downloaded_images >= h->current_scan_status->available_images) {
- h->current_metadata.valid = 0;
- return h->current_metadata;
+ h->current_metadata->valid = 0;
+ return;
}
_download_current_image(h);
_get_current_metadata(h);
_delete_current_image(h);
h->current_scan_status->current_image_number++;
-
- return h->current_metadata;
}
\ No newline at end of file
for (int i = 0; i < 10; i++) {
sleep(1);
- h->current_metadata = kds_s2000w_handler_get_parameters(handle);
- if (h->current_metadata.valid)
+ kds_s2000w_handler_get_parameters(handle);
+ if (h->current_metadata->valid)
break;
}
- if (!h->current_metadata.valid)
+ if (!h->current_metadata->valid)
return SANE_STATUS_UNSUPPORTED;
- params->format = h->current_metadata.format;
- params->last_frame = h->current_metadata.is_last;
- params->bytes_per_line = h->current_metadata.bytes_per_line;
- params->pixels_per_line = h->current_metadata.pixels_per_line;
- params->lines = h->current_metadata.lines;
- params->depth = h->current_metadata.depth;
+ params->format = h->current_metadata->format;
+ params->last_frame = h->current_metadata->is_last;
+ params->bytes_per_line = h->current_metadata->bytes_per_line;
+ params->pixels_per_line = h->current_metadata->pixels_per_line;
+ params->lines = h->current_metadata->lines;
+ params->depth = h->current_metadata->depth;
h->read_info.read_size = 0;
h->read_info.readed_bytes_per_line = 0;
h->read_info.readed_lines = 0;
return SANE_STATUS_CANCELLED;
}
- int skip_header_bytes = _sane_kds_s2000w_net_find_first_data_byte(h->current_metadata.image);
+ int skip_header_bytes = _sane_kds_s2000w_net_find_first_data_byte(h->current_metadata->image);
if (h->read_info.read_size <= 0)
h->read_info.read_size += skip_header_bytes;
- if (h->read_info.readed_lines >= h->current_metadata.lines) {
+ if (h->read_info.readed_lines >= h->current_metadata->lines) {
*length = 0;
h->read_info.readed_lines = 0;
return SANE_STATUS_EOF;
}
int maxlen = max_length;
- if (h->current_metadata.bytes_per_line - h->read_info.readed_bytes_per_line < max_length)
- maxlen = h->current_metadata.bytes_per_line - h->read_info.readed_bytes_per_line;
+ if (h->current_metadata->bytes_per_line - h->read_info.readed_bytes_per_line < max_length)
+ maxlen = h->current_metadata->bytes_per_line - h->read_info.readed_bytes_per_line;
*length = maxlen;
- memcpy(data, h->current_metadata.image + h->read_info.read_size, *length);
+ memcpy(data, h->current_metadata->image + h->read_info.read_size, *length);
h->read_info.readed_bytes_per_line += *length;
h->read_info.read_size += *length;
- if (h->read_info.readed_bytes_per_line >= h->current_metadata.bytes_per_line) {
+ if (h->read_info.readed_bytes_per_line >= h->current_metadata->bytes_per_line) {
h->read_info.readed_bytes_per_line = 0;
h->read_info.readed_lines++;
}
image[i] = 0x0a;
}
image[3] = 0xff;
- h.current_metadata.format = 0;
- h.current_metadata.image = image;
- h.current_metadata.bytes_per_line = 10;
- h.current_metadata.lines = 5;
+ h.current_metadata = malloc(sizeof(metadata));
+ h.current_metadata->format = 0;
+ h.current_metadata->image = image;
+ h.current_metadata->bytes_per_line = 10;
+ h.current_metadata->lines = 5;
int length = 0;
free(dataptr);
dataptr = NULL;
- free(image);
image = NULL;
+ free(h.current_metadata->image);
+ h.current_metadata->image = NULL;
+ free(h.current_metadata);
+ h.current_metadata = NULL;
}
END_TEST
h.read_info.read_size = 0;
h.read_info.readed_bytes_per_line = 0;
h.read_info.readed_lines = 0;
- h.current_metadata.format = 0;
- h.current_metadata.lines = 1;
- h.current_metadata.bytes_per_line = 65536;
+ h.current_metadata = malloc(sizeof(metadata));
+ h.current_metadata->format = 0;
+ h.current_metadata->lines = 1;
+ h.current_metadata->bytes_per_line = 65536;
char* image = malloc(sizeof(char) * 65539);
for (int i = 0; i < 3; i++) {
image[i] = 0x0a;
}
image[3] = 0xff;
- h.current_metadata.image = image;
+ h.current_metadata->image = image;
SANE_Int maxlen = 65536;
char* dataptr = malloc(sizeof(char) * maxlen);
dataptr = NULL;
free(length);
length = NULL;
- free(image);
image = NULL;
+ free(h.current_metadata->image);
+ h.current_metadata->image = NULL;
+ free(h.current_metadata);
+ h.current_metadata = NULL;
}
END_TEST
h.read_info.read_size = 0;
h.read_info.readed_bytes_per_line = 0;
h.read_info.readed_lines = 0;
- h.current_metadata.format = 0;
- h.current_metadata.lines = 1;
- h.current_metadata.bytes_per_line = 95000;
+ h.current_metadata = malloc(sizeof(metadata));
+ h.current_metadata->format = 0;
+ h.current_metadata->lines = 1;
+ h.current_metadata->bytes_per_line = 95000;
char* image = malloc(sizeof(char) * 95003);
for (int i = 0; i < 3; i++) {
image[i] = 0x0a;
}
image[3] = 0xff;
- h.current_metadata.image = image;
+ h.current_metadata->image = image;
SANE_Int maxlen = 65536;
char* dataptr = malloc(sizeof(char) * maxlen);
dataptr = NULL;
free(length);
length = NULL;
- free(image);
image = NULL;
+ free(h.current_metadata->image);
+ h.current_metadata->image = NULL;
+ free(h.current_metadata);
+ h.current_metadata = NULL;
}
END_TEST
\ No newline at end of file