params->pixels_per_line = mdata->width;
params->lines = mdata->height;
- if (params->depth > 8) {
- params->depth = 8;
- kds_s2000w_image_converter_jpg_to_pnm(scanner_image, image, params->depth);
- } else {
- kds_s2000w_image_converter_tiff_to_pnm(scanner_image, image);
- }
+ kds_s2000w_image_converter_jpg_to_pnm(scanner_image, image, params->depth);
+ kds_s2000w_image_converter_tiff_to_pnm(scanner_image, image);
kds_s2000w_debug_printf_int(DEBUG, "size of pnm image", image->size);
#if IMAGE_MAGICK_MAJOR == 7
#include <MagickCore/MagickCore.h>
#endif
+#include <string.h>
#include "kds_s2000w_image_converter.h"
#include "kds_s2000w_debug.h"
+int _kds_s2000w_image_converter_is_pnm(blobdata* image)
+{
+ if (image->size < 2)
+ return 0;
+
+ char* image_data = (char*) image->data;
+ if (strncmp(image_data, "P6", 2) == 0)
+ return 1;
+
+ return strncmp(image_data, "P4", 2) == 0;
+}
+
+int _kds_s2000w_image_converter_is_jpeg(blobdata* image)
+{
+ if (image->size < 2)
+ return 0;
+
+ const char first_byte = 0xff;
+ const char second_byte = 0xd8;
+
+ char* image_data = (char*) image->data;
+ return image_data[0] == first_byte && image_data[1] == second_byte;
+}
+
void _kds_s2000w_image_converter_to_pnm_depth(blobdata* in,
blobdata* out,
int depth,
{
kds_s2000w_debug_printf(ALL, "kds_s2000w_convert_jpg_to_pnm_With_depth");
+ if (!_kds_s2000w_image_converter_is_jpeg(in))
+ return;
+
_kds_s2000w_image_converter_to_pnm_depth(in, out, depth, "jpg");
}
{
kds_s2000w_debug_printf(ALL, "kds_s2000w_convert_tiff_to_pnm");
+ if (_kds_s2000w_image_converter_is_jpeg(in))
+ return;
+
_kds_s2000w_image_converter_to_pnm_depth(in, out, -1, "tiff");
}
\ No newline at end of file
void __wrap_kds_s2000w_image_converter_jpg_to_pnm(blobdata* in, blobdata* out)
{
- if (in->data != NULL) {
- out->data = malloc(sizeof(char) * in->size);
- memcpy(out->data, in->data, in->size);
- out->size = in->size;
- }
+ if (in->data == NULL)
+ return;
- return;
+ out->data = malloc(sizeof(char) * in->size);
+ memcpy(out->data, in->data, in->size);
+ out->size = in->size;
+ free(in->data);
+ in->data = NULL;
+ in->size = 0;
}
void __wrap_kds_s2000w_image_converter_tiff_to_pnm(blobdata* in, blobdata* out)
{
- if (in->data != NULL) {
- out->data = malloc(sizeof(char) * in->size);
- memcpy(out->data, in->data, in->size);
- out->size = in->size;
- }
+ if (in->data == NULL)
+ return;
- return;
+ out->data = malloc(sizeof(char) * in->size);
+ memcpy(out->data, in->data, in->size);
+ out->size = in->size;
+ free(in->data);
+ in->data = NULL;
+ in->size = 0;
}
\ No newline at end of file