]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change read tiff from memory
authorBastian Dehn <hhaalo@arcor.de>
Fri, 14 Feb 2025 18:34:44 +0000 (19:34 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Fri, 14 Feb 2025 18:34:50 +0000 (19:34 +0100)
src/kds_s2000w_image_converter_netpbm.c

index 77e685f0005c862d25d2f63ce94edccde6010a68..14d94b32594e897d74e27fda35df77e41be40f84 100644 (file)
@@ -19,30 +19,68 @@ enum imgformat {
        RGB = 3
 };
 
+typedef struct {
+       blobdata* image;
+       toff_t curr_offset;
+} tiff_reader;
+
 tsize_t _kds_s2000w_image_converter_tiff_read(thandle_t handler, tdata_t data, tsize_t size)
 {
-       return fread(data, sizeof(char), size, handler);
+       tiff_reader* reader = (tiff_reader*) handler;
+       char* imagedata = (char*) reader->image->data;
+       memcpy(data, &imagedata[reader->curr_offset], size);
+       reader->curr_offset += size;
+
+       return size;
 }
 
 tsize_t _kds_s2000w_image_converter_tiff_write(thandle_t handler, tdata_t data, tsize_t size)
 {
-       return fwrite(data, sizeof(char), size, handler);
+       tiff_reader* writer = (tiff_reader*) handler;
+       char* imagedata = (char*) writer->image->data;
+       memcpy(&imagedata[writer->curr_offset], data, size);
+       writer->curr_offset += size;
+
+       return size;
 }
 
 toff_t _kds_s2000w_image_converter_tiff_seek(thandle_t handler, toff_t offset, int whence)
 {
-       fseek(handler, offset, whence);
-       return ftell(handler);
+       tiff_reader* reader = (tiff_reader*) handler;
+
+       switch (whence) {
+       case SEEK_SET:
+               reader->curr_offset = offset;
+               break;
+       case SEEK_CUR:
+               reader->curr_offset += offset;
+               break;
+       case SEEK_END:
+               reader->curr_offset = reader->image->size - 1;
+               reader->curr_offset += offset;
+               break;
+       default:
+               break;
+       }
+
+       return reader->curr_offset;
 }
 
 int _kds_s2000w_image_converter_tiff_close(thandle_t handler)
 {
-       return fclose(handler);
+       tiff_reader* reader = (tiff_reader*) handler;
+
+       free(reader);
+       reader = NULL;
+
+       return 0;
 }
 
 toff_t _kds_s2000w_image_converter_tiff_size(thandle_t handler)
 {
-       return ftell(handler);
+       tiff_reader* reader = (tiff_reader*) handler;
+
+       return reader->curr_offset;
 }
 
 uint32_t _kds_s2000w_image_converter_find_char(blobdata* image, uint32_t start, const char cfind)
@@ -78,8 +116,10 @@ uint32_t _kds_s2000w_image_converter_get_number_from_substring(char* data, uint3
 
 void _kds_s2000w_image_converter_tiff_metadata(blobdata* image, image_metadata* mdata)
 {
-       FILE* input = fmemopen(image->data, image->size, "r");
-       TIFF* tiff = TIFFClientOpen("input.tiff", "r", input,
+       tiff_reader* tiff_handler = malloc(sizeof(tiff_reader));
+       tiff_handler->image = image;
+       tiff_handler->curr_offset = 0;
+       TIFF* tiff = TIFFClientOpen("input.tiff", "r", (thandle_t) tiff_handler,
                _kds_s2000w_image_converter_tiff_read,
                _kds_s2000w_image_converter_tiff_write,
                _kds_s2000w_image_converter_tiff_seek,
@@ -333,8 +373,10 @@ void _kds_s2000w_image_converter_tiff_to_pnm(blobdata* in, blobdata* out)
 {
        kds_s2000w_debug_printf(ALL, "kds_s2000w_image_converter_tiff_to_pnm");
 
-       FILE* tiff_stream = fmemopen(in->data, in->size, "r");
-       TIFF* tiff = TIFFClientOpen("input.tiff", "r", tiff_stream,
+       tiff_reader* tiff_handler = malloc(sizeof(tiff_reader));
+       tiff_handler->image = in;
+       tiff_handler->curr_offset = 0;
+       TIFF* tiff = TIFFClientOpen("input.tiff", "r", (thandle_t*) tiff_handler,
                _kds_s2000w_image_converter_tiff_read,
                _kds_s2000w_image_converter_tiff_write,
                _kds_s2000w_image_converter_tiff_seek,